#31912: pathlib PermissionError problem
-----------------------------------------+------------------------
Reporter: leonyxz | Owner: nobody
Type: Bug | Status: new
Component: Uncategorized | Version: 3.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+------------------------
Hello,
Python 3.8
FreeBSD 11.3-RELEASE-p12 with custom settings mentioned later.
On vanilla configuration of FreeBSD there is no issue.
Installation of FreeBSD in question has mac_bsdextended turned on
([https://www.freebsd.org/cgi/man.cgi?query=mac_bsdextended&sektion=4&apropos=0&manpath=FreeBSD+12.1-RELEASE+and+Ports])
Using ugidfw
([https://www.freebsd.org/cgi/man.cgi?query=ugidfw&sektion=8&manpath
=freebsd-release-ports]), the following rule has been set:
---------------------------------------------------------------
{{{
0 subject not uid root gid nobody object gid wheel type d mode sx
}}}
---------------------------------------------------------------
Attempts to run Django 3.1 result in
---------------------------------------------------------------
{{{
$ python manage.py runserver 0.0.0.0:1337
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/userlogin/.virtualenvs/django31/lib/python3.8/site-
packages/django/core/management/__init__.py", line 401, in
execute_from_command_line
utility.execute()
File "/home/userlogin/.virtualenvs/django31/lib/python3.8/site-
packages/django/core/management/__init__.py", line 345, in execute
settings.INSTALLED_APPS
File "/home/userlogin/.virtualenvs/django31/lib/python3.8/site-
packages/django/conf/__init__.py", line 83, in __getattr__
self._setup(name)
File "/home/userlogin/.virtualenvs/django31/lib/python3.8/site-
packages/django/conf/__init__.py", line 70, in _setup
self._wrapped = Settings(settings_module)
File "/home/userlogin/.virtualenvs/django31/lib/python3.8/site-
packages/django/conf/__init__.py", line 177, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
File
"/usr/home/userlogin/domains/django31.userlogin.com/public_python/project/settings.py",
line 16, in <module>
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
File "/usr/local/lib/python3.8/pathlib.py", line 1159, in resolve
s = self._flavour.resolve(self, strict=strict)
File "/usr/local/lib/python3.8/pathlib.py", line 355, in resolve
return _resolve(base, str(path)) or sep
File "/usr/local/lib/python3.8/pathlib.py", line 339, in _resolve
target = accessor.readlink(newpath)
File "/usr/local/lib/python3.8/pathlib.py", line 439, in readlink
return os.readlink(path)
PermissionError: [Errno 13] Permission denied: '/usr'
}}}
---------------------------------------------------------------
The issue seems to be comnected with following piece code
[https://github.com/python/cpython/blob/master/Lib/pathlib.py#L342-L346]
---------------------------------------------------------------
{{{
try:
target = accessor.readlink(newpath)
except OSError as e:
if e.errno != EINVAL and strict:
raise
# Not a symlink, or non-strict mode. We just leave the
path
# untouched.
path = newpath
}}}
---------------------------------------------------------------
With ugidfw enabled, `os.readlink` raises a `PermissionError`, which is
unhandled by pathlib.
--
Ticket URL: <https://code.djangoproject.com/ticket/31912>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/050.c9db1fc9c552bfdfe9063afef43d3321%40djangoproject.com.