Browse Source

Fixed #31912 -- Removed strict=True in Path.resolve() in project template and CommonPasswordValidator.

This caused permission errors when user didn't have permissions to
all intermediate directories in a Django installation path.

Thanks tytusd and leonyxz for reports.

Regression in edeec1247e52de6fc32cee93e96d4ce36003ea4b and
26554cf5d1e96db10d0d5f4b69683a22fb82fdf8.
Mariusz Felisiak 4 years ago
parent
commit
e39e727ded

+ 1 - 1
django/conf/project_template/project_name/settings.py-tpl

@@ -13,7 +13,7 @@ https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/
 from pathlib import Path
 
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
-BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
+BASE_DIR = Path(__file__).resolve().parent.parent
 
 
 # Quick-start development settings - unsuitable for production

+ 1 - 1
django/contrib/auth/password_validation.py

@@ -167,7 +167,7 @@ class CommonPasswordValidator:
     https://gist.github.com/roycewilliams/281ce539915a947a23db17137d91aeb7
     The password list must be lowercased to match the comparison in validate().
     """
-    DEFAULT_PASSWORD_LIST_PATH = Path(__file__).resolve(strict=True).parent / 'common-passwords.txt.gz'
+    DEFAULT_PASSWORD_LIST_PATH = Path(__file__).resolve().parent / 'common-passwords.txt.gz'
 
     def __init__(self, password_list_path=DEFAULT_PASSWORD_LIST_PATH):
         try:

+ 1 - 1
docs/howto/overriding-templates.txt

@@ -29,7 +29,7 @@ called ``blog``, which provides the templates ``blog/post.html`` and
 
     from pathlib import Path
 
-    BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
+    BASE_DIR = Path(__file__).resolve().parent.parent
 
     INSTALLED_APPS = [
         ...,

+ 5 - 0
docs/releases/3.1.1.txt

@@ -43,3 +43,8 @@ Bugfixes
 * Fixed ``__in`` lookup on key transforms for
   :class:`~django.db.models.JSONField` with MariaDB, MySQL, Oracle, and SQLite
   (:ticket:`31936`).
+
+* Fixed a regression in Django 3.1 that caused permission errors in
+  ``CommonPasswordValidator`` and ``settings.py`` generated by the
+  :djadmin:`startproject` command, when user didn't have permissions to all
+  intermediate directories in a Django installation path (:ticket:`31912`).