AccessControl 7.2__tar.gz → 7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {accesscontrol-7.2 → accesscontrol-7.4}/.manylinux-install.sh +18 -10
- {accesscontrol-7.2 → accesscontrol-7.4}/.manylinux.sh +2 -2
- {accesscontrol-7.2 → accesscontrol-7.4}/.pre-commit-config.yaml +8 -7
- {accesscontrol-7.2 → accesscontrol-7.4}/CHANGES.rst +43 -2
- {accesscontrol-7.2 → accesscontrol-7.4}/CONTRIBUTING.md +3 -3
- {accesscontrol-7.2 → accesscontrol-7.4}/MANIFEST.in +2 -2
- {accesscontrol-7.2 → accesscontrol-7.4}/PKG-INFO +61 -21
- accesscontrol-7.4/pyproject.toml +111 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/setup.cfg +0 -3
- accesscontrol-7.4/setup.py +32 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ImplPython.py +18 -6
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityInfo.py +1 -1
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/cAccessControl.c +79 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZopeGuards.py +57 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/PKG-INFO +61 -21
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/SOURCES.txt +0 -1
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/requires.txt +4 -4
- {accesscontrol-7.2 → accesscontrol-7.4}/tox.ini +11 -8
- accesscontrol-7.2/pyproject.toml +0 -25
- accesscontrol-7.2/setup.py +0 -103
- accesscontrol-7.2/src/AccessControl.egg-info/not-zip-safe +0 -1
- {accesscontrol-7.2 → accesscontrol-7.4}/COPYRIGHT.txt +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/HISTORY.rst +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/LICENSE.txt +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/README.rst +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/buildout.cfg +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/docs/AccessControl.rst +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/docs/requestmethod.rst +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/include/Acquisition/Acquisition.h +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/include/ExtensionClass/ExtensionClass.h +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/include/ExtensionClass/_compat.h +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/AuthEncoding.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ImplC.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Implementation.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Owned.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Permission.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/PermissionMapping.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/PermissionRole.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Permissions.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Role.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityManagement.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityManager.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SimpleObjectPolicies.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SpecialUsers.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/User.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ZopeGuards.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ZopeSecurityPolicy.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/_compat.h +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/class_init.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/configure.zcml +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/interfaces.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/logger_wrapper.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/meta.zcml +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/metaconfigure.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/owner.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/permissions.zcml +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/requestmethod.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/rolemanager.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/safe_formatter.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/security.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tainted.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/actual_python.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/submodule/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/private_module/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/private_module/submodule/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/public_module/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/public_module/submodule/__init__.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testClassSecurityInfo.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testImplementation.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testModuleSecurity.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionMapping.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionRole.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testSecurityManager.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZCML.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZopeSecurityPolicy.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_owner.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_requestmethod.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_rolemanager.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_safe_formatter.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_safeiter.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_tainted.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_userfolder.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_users.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/unauthorized.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/userfolder.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/users.py +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/dependency_links.txt +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/entry_points.txt +0 -0
- {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Generated from:
|
|
3
|
-
# https://github.com/zopefoundation/meta/tree/master/
|
|
2
|
+
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
3
|
+
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
4
4
|
|
|
5
5
|
set -e -x
|
|
6
6
|
|
|
@@ -28,12 +28,12 @@ yum -y install libffi-devel
|
|
|
28
28
|
|
|
29
29
|
tox_env_map() {
|
|
30
30
|
case $1 in
|
|
31
|
-
*"cp38"*) echo 'py38';;
|
|
32
|
-
*"cp39"*) echo 'py39';;
|
|
33
31
|
*"cp310"*) echo 'py310';;
|
|
34
32
|
*"cp311"*) echo 'py311';;
|
|
35
33
|
*"cp312"*) echo 'py312';;
|
|
36
34
|
*"cp313"*) echo 'py313';;
|
|
35
|
+
*"cp314"*) echo 'py314';;
|
|
36
|
+
*"cp315"*) echo 'py315';;
|
|
37
37
|
*) echo 'py';;
|
|
38
38
|
esac
|
|
39
39
|
}
|
|
@@ -41,14 +41,19 @@ tox_env_map() {
|
|
|
41
41
|
# Compile wheels
|
|
42
42
|
for PYBIN in /opt/python/*/bin; do
|
|
43
43
|
if \
|
|
44
|
-
[[ "${PYBIN}" == *"cp38/"* ]] || \
|
|
45
|
-
[[ "${PYBIN}" == *"cp39/"* ]] || \
|
|
46
44
|
[[ "${PYBIN}" == *"cp310/"* ]] || \
|
|
47
45
|
[[ "${PYBIN}" == *"cp311/"* ]] || \
|
|
48
46
|
[[ "${PYBIN}" == *"cp312/"* ]] || \
|
|
49
|
-
[[ "${PYBIN}" == *"cp313/"* ]]
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
[[ "${PYBIN}" == *"cp313/"* ]] || \
|
|
48
|
+
[[ "${PYBIN}" == *"cp314/"* ]] || \
|
|
49
|
+
[[ "${PYBIN}" == *"cp315/"* ]] ; then
|
|
50
|
+
if [[ "${PYBIN}" == *"cp315/"* ]] ; then
|
|
51
|
+
"${PYBIN}/pip" install --pre -e /io/
|
|
52
|
+
"${PYBIN}/pip" wheel /io/ --pre -w wheelhouse/
|
|
53
|
+
else
|
|
54
|
+
"${PYBIN}/pip" install -e /io/
|
|
55
|
+
"${PYBIN}/pip" wheel /io/ -w wheelhouse/
|
|
56
|
+
fi
|
|
52
57
|
if [ `uname -m` == 'aarch64' ]; then
|
|
53
58
|
cd /io/
|
|
54
59
|
${PYBIN}/pip install tox
|
|
@@ -60,7 +65,10 @@ for PYBIN in /opt/python/*/bin; do
|
|
|
60
65
|
fi
|
|
61
66
|
done
|
|
62
67
|
|
|
68
|
+
# Show what wheels we have
|
|
69
|
+
echo "Fixing up the following wheels:"
|
|
70
|
+
ls -l wheelhouse/accesscontrol*.whl
|
|
63
71
|
# Bundle external shared libraries into the wheels
|
|
64
|
-
for whl in wheelhouse/
|
|
72
|
+
for whl in wheelhouse/accesscontrol*.whl; do
|
|
65
73
|
auditwheel repair "$whl" -w /io/wheelhouse/
|
|
66
74
|
done
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Generated from:
|
|
3
|
-
# https://github.com/zopefoundation/meta/tree/master/
|
|
2
|
+
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
3
|
+
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
4
4
|
|
|
5
5
|
set -e -x
|
|
6
6
|
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
# Generated from:
|
|
2
|
-
# https://github.com/zopefoundation/meta/tree/master/
|
|
1
|
+
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
2
|
+
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
3
3
|
minimum_pre_commit_version: '3.6'
|
|
4
4
|
repos:
|
|
5
5
|
- repo: https://github.com/pycqa/isort
|
|
6
|
-
rev: "
|
|
6
|
+
rev: "8.0.1"
|
|
7
7
|
hooks:
|
|
8
8
|
- id: isort
|
|
9
9
|
- repo: https://github.com/hhatto/autopep8
|
|
10
|
-
rev: "v2.3.
|
|
10
|
+
rev: "v2.3.2"
|
|
11
11
|
hooks:
|
|
12
12
|
- id: autopep8
|
|
13
13
|
args: [--in-place, --aggressive, --aggressive]
|
|
14
14
|
- repo: https://github.com/asottile/pyupgrade
|
|
15
|
-
rev: v3.
|
|
15
|
+
rev: v3.21.2
|
|
16
16
|
hooks:
|
|
17
17
|
- id: pyupgrade
|
|
18
|
-
args: [--
|
|
18
|
+
args: [--py310-plus]
|
|
19
19
|
- repo: https://github.com/isidentical/teyit
|
|
20
20
|
rev: 0.4.3
|
|
21
21
|
hooks:
|
|
22
22
|
- id: teyit
|
|
23
|
+
language_version: python3.13
|
|
23
24
|
- repo: https://github.com/PyCQA/flake8
|
|
24
|
-
rev: "7.
|
|
25
|
+
rev: "7.3.0"
|
|
25
26
|
hooks:
|
|
26
27
|
- id: flake8
|
|
27
28
|
additional_dependencies:
|
|
@@ -1,8 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
Change log
|
|
2
|
+
==========
|
|
3
3
|
|
|
4
4
|
For changes before version 3.0, see ``HISTORY.rst``.
|
|
5
5
|
|
|
6
|
+
|
|
7
|
+
7.4 (2026-07-13)
|
|
8
|
+
----------------
|
|
9
|
+
|
|
10
|
+
- Fix a parity defect between the Python and C implementations of
|
|
11
|
+
``guarded_getattr``: the pure-Python implementation keyed the container
|
|
12
|
+
assertion on ``type(value.__self__)`` instead of ``type(inst)``, so under
|
|
13
|
+
``PURE_PYTHON`` a bound method of an allow-listed simple type (e.g.
|
|
14
|
+
``tuple``/``bytes``/``range``) was returned without calling ``validate()``.
|
|
15
|
+
The Python implementation now keys on ``type(inst)``, matching the C
|
|
16
|
+
implementation, and a regression test guards the behaviour.
|
|
17
|
+
|
|
18
|
+
- Add preliminary support for Python 3.15 as of 3.15b1.
|
|
19
|
+
|
|
20
|
+
- Add support for automatically building and publishing Windows/ARM64 wheels.
|
|
21
|
+
|
|
22
|
+
- Add support for automatically building and publishing source distributions.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
7.3 (2025-11-16)
|
|
26
|
+
----------------
|
|
27
|
+
|
|
28
|
+
- Move all supported package metadata into ``pyproject.toml``.
|
|
29
|
+
|
|
30
|
+
- Add support for Python 3.14.
|
|
31
|
+
|
|
32
|
+
- Drop support for Python 3.8 and 3.9.
|
|
33
|
+
|
|
34
|
+
|
|
6
35
|
7.2 (2024-11-03)
|
|
7
36
|
----------------
|
|
8
37
|
|
|
@@ -244,16 +273,19 @@ Changes since 3.0.12:
|
|
|
244
273
|
``SecurityInfo._ModuleSecurityInfo``. See:
|
|
245
274
|
https://github.com/zopefoundation/AccessControl/issues/12
|
|
246
275
|
|
|
276
|
+
|
|
247
277
|
3.0.11 (2014-11-02)
|
|
248
278
|
-------------------
|
|
249
279
|
|
|
250
280
|
- Harden test fix for machines that do not define `localhost`.
|
|
251
281
|
|
|
282
|
+
|
|
252
283
|
3.0.10 (2014-11-02)
|
|
253
284
|
-------------------
|
|
254
285
|
|
|
255
286
|
- Test fix for machines that do not define `localhost`.
|
|
256
287
|
|
|
288
|
+
|
|
257
289
|
3.0.9 (2014-08-08)
|
|
258
290
|
------------------
|
|
259
291
|
|
|
@@ -264,6 +296,7 @@ Changes since 3.0.12:
|
|
|
264
296
|
- LP #1248529: Leave existing security manager in place inside
|
|
265
297
|
``RoleManager.manage_getUserRolesAndPermissions``.
|
|
266
298
|
|
|
299
|
+
|
|
267
300
|
3.0.8 (2013-07-16)
|
|
268
301
|
------------------
|
|
269
302
|
|
|
@@ -271,6 +304,7 @@ Changes since 3.0.12:
|
|
|
271
304
|
(used by ``ImplC``) when using the "C" security policy. Thanks to
|
|
272
305
|
Arnaud Fontaine for the patch.
|
|
273
306
|
|
|
307
|
+
|
|
274
308
|
3.0.7 (2013-05-14)
|
|
275
309
|
------------------
|
|
276
310
|
|
|
@@ -280,39 +314,46 @@ Changes since 3.0.12:
|
|
|
280
314
|
- Prevent infinite loop when looking up local roles in an acquisition chain
|
|
281
315
|
with cycles.
|
|
282
316
|
|
|
317
|
+
|
|
283
318
|
3.0.6 (2012-10-31)
|
|
284
319
|
------------------
|
|
285
320
|
|
|
286
321
|
- LP #1071067: Use a stronger random number generator and a constant time
|
|
287
322
|
comparison function.
|
|
288
323
|
|
|
324
|
+
|
|
289
325
|
3.0.5 (2012-10-21)
|
|
290
326
|
------------------
|
|
291
327
|
|
|
292
328
|
- LP #966101: Recognize special `zope2.Private` permission in ZCML
|
|
293
329
|
role directive.
|
|
294
330
|
|
|
331
|
+
|
|
295
332
|
3.0.4 (2012-09-09)
|
|
296
333
|
------------------
|
|
297
334
|
|
|
298
335
|
- LP #1047318: Tighten import restrictions for restricted code.
|
|
299
336
|
|
|
337
|
+
|
|
300
338
|
3.0.3 (2012-08-23)
|
|
301
339
|
------------------
|
|
302
340
|
|
|
303
341
|
- Fix a bug in ZopeSecurityPolicy.py. Global variable `rolesForPermissionOn`
|
|
304
342
|
could be overridden if `__role__` had custom rolesForPermissionOn.
|
|
305
343
|
|
|
344
|
+
|
|
306
345
|
3.0.2 (2012-06-22)
|
|
307
346
|
------------------
|
|
308
347
|
|
|
309
348
|
- Add Anonymous as a default role for Public permission.
|
|
310
349
|
|
|
350
|
+
|
|
311
351
|
3.0.1 (2012-05-24)
|
|
312
352
|
------------------
|
|
313
353
|
|
|
314
354
|
- Fix tests under Python 2.6.
|
|
315
355
|
|
|
356
|
+
|
|
316
357
|
3.0 (2012-05-12)
|
|
317
358
|
----------------
|
|
318
359
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
Generated from:
|
|
3
|
-
https://github.com/zopefoundation/meta/tree/master/
|
|
4
|
-
-->
|
|
2
|
+
Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
3
|
+
https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
4
|
+
-->
|
|
5
5
|
# Contributing to zopefoundation projects
|
|
6
6
|
|
|
7
7
|
The projects under the zopefoundation GitHub organization are open source and
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Generated from:
|
|
2
|
-
# https://github.com/zopefoundation/meta/tree/master/
|
|
1
|
+
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
2
|
+
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
3
3
|
include *.md
|
|
4
4
|
include *.rst
|
|
5
5
|
include *.txt
|
|
@@ -1,39 +1,38 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: AccessControl
|
|
3
|
-
Version: 7.
|
|
4
|
-
Summary: Security framework for Zope
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Project-URL:
|
|
10
|
-
Project-URL:
|
|
11
|
-
Keywords: security
|
|
3
|
+
Version: 7.4
|
|
4
|
+
Summary: Security framework for Zope
|
|
5
|
+
Author-email: Zope Foundation and contributors <zope-dev@zope.dev>
|
|
6
|
+
Maintainer-email: Plone Foundation and contributors <zope-dev@zope.dev>
|
|
7
|
+
License-Expression: ZPL-2.1
|
|
8
|
+
Project-URL: Issues, https://github.com/zopefoundation/AccessControl/issues
|
|
9
|
+
Project-URL: Source, https://github.com/zopefoundation/AccessControl
|
|
10
|
+
Project-URL: Changelog, https://github.com/zopefoundation/AccessControl/blob/master/CHANGES.rst
|
|
11
|
+
Keywords: security,access,authorization
|
|
12
12
|
Classifier: Development Status :: 6 - Mature
|
|
13
13
|
Classifier: Environment :: Web Environment
|
|
14
14
|
Classifier: Framework :: Zope
|
|
15
15
|
Classifier: Framework :: Zope :: 5
|
|
16
|
-
Classifier: License :: OSI Approved :: Zope Public License
|
|
17
16
|
Classifier: Operating System :: OS Independent
|
|
18
17
|
Classifier: Programming Language :: Python
|
|
19
18
|
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
23
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
25
23
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
26
25
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
|
-
Requires-Python: >=3.
|
|
26
|
+
Requires-Python: >=3.10
|
|
28
27
|
Description-Content-Type: text/x-rst
|
|
29
28
|
License-File: LICENSE.txt
|
|
30
29
|
Requires-Dist: Acquisition
|
|
31
30
|
Requires-Dist: AuthEncoding
|
|
32
31
|
Requires-Dist: BTrees
|
|
33
32
|
Requires-Dist: DateTime
|
|
34
|
-
Requires-Dist: ExtensionClass
|
|
35
|
-
Requires-Dist: Persistence
|
|
36
|
-
Requires-Dist: RestrictedPython
|
|
33
|
+
Requires-Dist: ExtensionClass
|
|
34
|
+
Requires-Dist: Persistence
|
|
35
|
+
Requires-Dist: RestrictedPython
|
|
37
36
|
Requires-Dist: transaction
|
|
38
37
|
Requires-Dist: zExceptions
|
|
39
38
|
Requires-Dist: zope.component
|
|
@@ -45,7 +44,8 @@ Requires-Dist: zope.schema
|
|
|
45
44
|
Requires-Dist: zope.security
|
|
46
45
|
Requires-Dist: zope.testing
|
|
47
46
|
Provides-Extra: test
|
|
48
|
-
Requires-Dist: zope.testrunner; extra == "test"
|
|
47
|
+
Requires-Dist: zope.testrunner>=6.4; extra == "test"
|
|
48
|
+
Dynamic: license-file
|
|
49
49
|
|
|
50
50
|
.. image:: https://github.com/zopefoundation/AccessControl/actions/workflows/tests.yml/badge.svg
|
|
51
51
|
:target: https://github.com/zopefoundation/AccessControl/actions/workflows/tests.yml
|
|
@@ -67,12 +67,40 @@ AccessControl
|
|
|
67
67
|
|
|
68
68
|
AccessControl provides a general security framework for use in Zope.
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
=========
|
|
70
|
+
Change log
|
|
71
|
+
==========
|
|
73
72
|
|
|
74
73
|
For changes before version 3.0, see ``HISTORY.rst``.
|
|
75
74
|
|
|
75
|
+
|
|
76
|
+
7.4 (2026-07-13)
|
|
77
|
+
----------------
|
|
78
|
+
|
|
79
|
+
- Fix a parity defect between the Python and C implementations of
|
|
80
|
+
``guarded_getattr``: the pure-Python implementation keyed the container
|
|
81
|
+
assertion on ``type(value.__self__)`` instead of ``type(inst)``, so under
|
|
82
|
+
``PURE_PYTHON`` a bound method of an allow-listed simple type (e.g.
|
|
83
|
+
``tuple``/``bytes``/``range``) was returned without calling ``validate()``.
|
|
84
|
+
The Python implementation now keys on ``type(inst)``, matching the C
|
|
85
|
+
implementation, and a regression test guards the behaviour.
|
|
86
|
+
|
|
87
|
+
- Add preliminary support for Python 3.15 as of 3.15b1.
|
|
88
|
+
|
|
89
|
+
- Add support for automatically building and publishing Windows/ARM64 wheels.
|
|
90
|
+
|
|
91
|
+
- Add support for automatically building and publishing source distributions.
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
7.3 (2025-11-16)
|
|
95
|
+
----------------
|
|
96
|
+
|
|
97
|
+
- Move all supported package metadata into ``pyproject.toml``.
|
|
98
|
+
|
|
99
|
+
- Add support for Python 3.14.
|
|
100
|
+
|
|
101
|
+
- Drop support for Python 3.8 and 3.9.
|
|
102
|
+
|
|
103
|
+
|
|
76
104
|
7.2 (2024-11-03)
|
|
77
105
|
----------------
|
|
78
106
|
|
|
@@ -314,16 +342,19 @@ Changes since 3.0.12:
|
|
|
314
342
|
``SecurityInfo._ModuleSecurityInfo``. See:
|
|
315
343
|
https://github.com/zopefoundation/AccessControl/issues/12
|
|
316
344
|
|
|
345
|
+
|
|
317
346
|
3.0.11 (2014-11-02)
|
|
318
347
|
-------------------
|
|
319
348
|
|
|
320
349
|
- Harden test fix for machines that do not define `localhost`.
|
|
321
350
|
|
|
351
|
+
|
|
322
352
|
3.0.10 (2014-11-02)
|
|
323
353
|
-------------------
|
|
324
354
|
|
|
325
355
|
- Test fix for machines that do not define `localhost`.
|
|
326
356
|
|
|
357
|
+
|
|
327
358
|
3.0.9 (2014-08-08)
|
|
328
359
|
------------------
|
|
329
360
|
|
|
@@ -334,6 +365,7 @@ Changes since 3.0.12:
|
|
|
334
365
|
- LP #1248529: Leave existing security manager in place inside
|
|
335
366
|
``RoleManager.manage_getUserRolesAndPermissions``.
|
|
336
367
|
|
|
368
|
+
|
|
337
369
|
3.0.8 (2013-07-16)
|
|
338
370
|
------------------
|
|
339
371
|
|
|
@@ -341,6 +373,7 @@ Changes since 3.0.12:
|
|
|
341
373
|
(used by ``ImplC``) when using the "C" security policy. Thanks to
|
|
342
374
|
Arnaud Fontaine for the patch.
|
|
343
375
|
|
|
376
|
+
|
|
344
377
|
3.0.7 (2013-05-14)
|
|
345
378
|
------------------
|
|
346
379
|
|
|
@@ -350,39 +383,46 @@ Changes since 3.0.12:
|
|
|
350
383
|
- Prevent infinite loop when looking up local roles in an acquisition chain
|
|
351
384
|
with cycles.
|
|
352
385
|
|
|
386
|
+
|
|
353
387
|
3.0.6 (2012-10-31)
|
|
354
388
|
------------------
|
|
355
389
|
|
|
356
390
|
- LP #1071067: Use a stronger random number generator and a constant time
|
|
357
391
|
comparison function.
|
|
358
392
|
|
|
393
|
+
|
|
359
394
|
3.0.5 (2012-10-21)
|
|
360
395
|
------------------
|
|
361
396
|
|
|
362
397
|
- LP #966101: Recognize special `zope2.Private` permission in ZCML
|
|
363
398
|
role directive.
|
|
364
399
|
|
|
400
|
+
|
|
365
401
|
3.0.4 (2012-09-09)
|
|
366
402
|
------------------
|
|
367
403
|
|
|
368
404
|
- LP #1047318: Tighten import restrictions for restricted code.
|
|
369
405
|
|
|
406
|
+
|
|
370
407
|
3.0.3 (2012-08-23)
|
|
371
408
|
------------------
|
|
372
409
|
|
|
373
410
|
- Fix a bug in ZopeSecurityPolicy.py. Global variable `rolesForPermissionOn`
|
|
374
411
|
could be overridden if `__role__` had custom rolesForPermissionOn.
|
|
375
412
|
|
|
413
|
+
|
|
376
414
|
3.0.2 (2012-06-22)
|
|
377
415
|
------------------
|
|
378
416
|
|
|
379
417
|
- Add Anonymous as a default role for Public permission.
|
|
380
418
|
|
|
419
|
+
|
|
381
420
|
3.0.1 (2012-05-24)
|
|
382
421
|
------------------
|
|
383
422
|
|
|
384
423
|
- Fix tests under Python 2.6.
|
|
385
424
|
|
|
425
|
+
|
|
386
426
|
3.0 (2012-05-12)
|
|
387
427
|
----------------
|
|
388
428
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
|
|
2
|
+
# https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
|
|
3
|
+
[build-system]
|
|
4
|
+
requires = [
|
|
5
|
+
"setuptools",
|
|
6
|
+
"wheel",
|
|
7
|
+
]
|
|
8
|
+
build-backend = "setuptools.build_meta"
|
|
9
|
+
|
|
10
|
+
[project]
|
|
11
|
+
name = "AccessControl"
|
|
12
|
+
version = "7.4"
|
|
13
|
+
description = "Security framework for Zope"
|
|
14
|
+
keywords = ["security", "access", "authorization"]
|
|
15
|
+
dynamic = ["readme"]
|
|
16
|
+
requires-python = ">=3.10"
|
|
17
|
+
license = "ZPL-2.1"
|
|
18
|
+
authors = [
|
|
19
|
+
{ name = "Zope Foundation and contributors", email = "zope-dev@zope.dev" },
|
|
20
|
+
]
|
|
21
|
+
maintainers = [
|
|
22
|
+
{ name = "Plone Foundation and contributors", email = "zope-dev@zope.dev" },
|
|
23
|
+
]
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Development Status :: 6 - Mature",
|
|
26
|
+
"Environment :: Web Environment",
|
|
27
|
+
"Framework :: Zope",
|
|
28
|
+
"Framework :: Zope :: 5",
|
|
29
|
+
"Operating System :: OS Independent",
|
|
30
|
+
"Programming Language :: Python",
|
|
31
|
+
"Programming Language :: Python :: 3",
|
|
32
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
33
|
+
"Programming Language :: Python :: 3.10",
|
|
34
|
+
"Programming Language :: Python :: 3.11",
|
|
35
|
+
"Programming Language :: Python :: 3.12",
|
|
36
|
+
"Programming Language :: Python :: 3.13",
|
|
37
|
+
"Programming Language :: Python :: 3.14",
|
|
38
|
+
"Programming Language :: Python :: Implementation :: CPython",
|
|
39
|
+
]
|
|
40
|
+
dependencies = [
|
|
41
|
+
"Acquisition",
|
|
42
|
+
"AuthEncoding",
|
|
43
|
+
"BTrees",
|
|
44
|
+
"DateTime",
|
|
45
|
+
"ExtensionClass",
|
|
46
|
+
"Persistence",
|
|
47
|
+
"RestrictedPython",
|
|
48
|
+
"transaction",
|
|
49
|
+
"zExceptions",
|
|
50
|
+
"zope.component",
|
|
51
|
+
"zope.configuration",
|
|
52
|
+
"zope.deferredimport",
|
|
53
|
+
"zope.interface",
|
|
54
|
+
"zope.publisher",
|
|
55
|
+
"zope.schema",
|
|
56
|
+
"zope.security",
|
|
57
|
+
"zope.testing",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[project.entry-points."zodbupdate.decode"]
|
|
61
|
+
decodes = "AccessControl:zodbupdate_decode_dict"
|
|
62
|
+
|
|
63
|
+
[project.optional-dependencies]
|
|
64
|
+
test = [
|
|
65
|
+
"zope.testrunner >= 6.4",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
[project.urls]
|
|
69
|
+
Issues = "https://github.com/zopefoundation/AccessControl/issues"
|
|
70
|
+
Source = "https://github.com/zopefoundation/AccessControl"
|
|
71
|
+
Changelog = "https://github.com/zopefoundation/AccessControl/blob/master/CHANGES.rst"
|
|
72
|
+
|
|
73
|
+
[tool.coverage.run]
|
|
74
|
+
branch = true
|
|
75
|
+
source = ["AccessControl"]
|
|
76
|
+
relative_files = true
|
|
77
|
+
|
|
78
|
+
[tool.coverage.report]
|
|
79
|
+
fail_under = 80
|
|
80
|
+
precision = 2
|
|
81
|
+
ignore_errors = true
|
|
82
|
+
show_missing = true
|
|
83
|
+
exclude_lines = [
|
|
84
|
+
"pragma: no cover",
|
|
85
|
+
"pragma: nocover",
|
|
86
|
+
"except ImportError:",
|
|
87
|
+
"raise NotImplementedError",
|
|
88
|
+
"if __name__ == '__main__':",
|
|
89
|
+
"self.fail",
|
|
90
|
+
"raise AssertionError",
|
|
91
|
+
"raise unittest.Skip",
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
[tool.coverage.html]
|
|
95
|
+
directory = "parts/htmlcov"
|
|
96
|
+
|
|
97
|
+
[tool.coverage.paths]
|
|
98
|
+
source = [
|
|
99
|
+
"src/",
|
|
100
|
+
".tox/*/lib/python*/site-packages/",
|
|
101
|
+
".tox/pypy*/site-packages/",
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
[tool.setuptools.dynamic]
|
|
105
|
+
readme = {file = ["README.rst", "CHANGES.rst"]}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
[tool.zest-releaser]
|
|
110
|
+
create-wheel = false
|
|
111
|
+
upload-pypi = false
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010 Zope Foundation and Contributors.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This software is subject to the provisions of the Zope Public License,
|
|
7
|
+
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
|
8
|
+
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
|
9
|
+
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
10
|
+
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
|
11
|
+
# FOR A PARTICULAR PURPOSE.
|
|
12
|
+
#
|
|
13
|
+
##############################################################################
|
|
14
|
+
|
|
15
|
+
from os.path import join
|
|
16
|
+
|
|
17
|
+
from setuptools import Extension
|
|
18
|
+
from setuptools import setup
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
ext_modules = [
|
|
22
|
+
Extension(
|
|
23
|
+
name='AccessControl.cAccessControl',
|
|
24
|
+
include_dirs=['include', 'src'],
|
|
25
|
+
sources=[join('src', 'AccessControl', 'cAccessControl.c')],
|
|
26
|
+
depends=[join('include', 'ExtensionClass', 'ExtensionClass.h'),
|
|
27
|
+
join('include', 'ExtensionClass', '_compat.h'),
|
|
28
|
+
join('include', 'Acquisition', 'Acquisition.h')]),
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
setup(ext_modules=ext_modules)
|
|
@@ -724,6 +724,16 @@ def guarded_getattr(inst, name, default=_marker):
|
|
|
724
724
|
if name[:1] == '_':
|
|
725
725
|
raise Unauthorized(name)
|
|
726
726
|
|
|
727
|
+
if name in ('format', 'format_map'):
|
|
728
|
+
if isinstance(inst, str):
|
|
729
|
+
from AccessControl.safe_formatter import safe_format
|
|
730
|
+
from AccessControl.safe_formatter import safe_format_map
|
|
731
|
+
if name == 'format':
|
|
732
|
+
return safe_format(inst, name)
|
|
733
|
+
return safe_format_map(inst, name)
|
|
734
|
+
if isinstance(inst, type) and issubclass(inst, str):
|
|
735
|
+
raise Unauthorized(name)
|
|
736
|
+
|
|
727
737
|
# Try to get the attribute normally so that unusual
|
|
728
738
|
# exceptions are caught early.
|
|
729
739
|
try:
|
|
@@ -733,12 +743,14 @@ def guarded_getattr(inst, name, default=_marker):
|
|
|
733
743
|
return default
|
|
734
744
|
raise
|
|
735
745
|
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
746
|
+
# The container assertion must be keyed on the type of the accessed
|
|
747
|
+
# object, to match the C implementation (see ``cAccessControl.c``, which
|
|
748
|
+
# uses ``Containers(type(inst))``). Keying on ``type(v.__self__)``
|
|
749
|
+
# instead let a bound method whose ``__self__`` is an allow-listed simple
|
|
750
|
+
# type (e.g. ``tuple``, ``bytes``, ``range``) take the truthy-assertion
|
|
751
|
+
# short-circuit and be returned without calling ``validate()`` -- a
|
|
752
|
+
# divergence from the C engine.
|
|
753
|
+
assertion = Containers(type(inst))
|
|
742
754
|
|
|
743
755
|
if isinstance(assertion, dict):
|
|
744
756
|
# We got a table that lets us reason about individual
|
|
@@ -320,7 +320,7 @@ class _ModuleSecurityInfo(SecurityInfo):
|
|
|
320
320
|
def __init__(self, module_name=None):
|
|
321
321
|
self.names = {}
|
|
322
322
|
if module_name is not None:
|
|
323
|
-
global _moduleSecurity
|
|
323
|
+
global _moduleSecurity # noqa: F824
|
|
324
324
|
_moduleSecurity[module_name] = self
|
|
325
325
|
|
|
326
326
|
__call____roles__ = ACCESS_PRIVATE
|