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.
Files changed (92) hide show
  1. {accesscontrol-7.2 → accesscontrol-7.4}/.manylinux-install.sh +18 -10
  2. {accesscontrol-7.2 → accesscontrol-7.4}/.manylinux.sh +2 -2
  3. {accesscontrol-7.2 → accesscontrol-7.4}/.pre-commit-config.yaml +8 -7
  4. {accesscontrol-7.2 → accesscontrol-7.4}/CHANGES.rst +43 -2
  5. {accesscontrol-7.2 → accesscontrol-7.4}/CONTRIBUTING.md +3 -3
  6. {accesscontrol-7.2 → accesscontrol-7.4}/MANIFEST.in +2 -2
  7. {accesscontrol-7.2 → accesscontrol-7.4}/PKG-INFO +61 -21
  8. accesscontrol-7.4/pyproject.toml +111 -0
  9. {accesscontrol-7.2 → accesscontrol-7.4}/setup.cfg +0 -3
  10. accesscontrol-7.4/setup.py +32 -0
  11. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ImplPython.py +18 -6
  12. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityInfo.py +1 -1
  13. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/cAccessControl.c +79 -0
  14. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZopeGuards.py +57 -0
  15. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/PKG-INFO +61 -21
  16. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/SOURCES.txt +0 -1
  17. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/requires.txt +4 -4
  18. {accesscontrol-7.2 → accesscontrol-7.4}/tox.ini +11 -8
  19. accesscontrol-7.2/pyproject.toml +0 -25
  20. accesscontrol-7.2/setup.py +0 -103
  21. accesscontrol-7.2/src/AccessControl.egg-info/not-zip-safe +0 -1
  22. {accesscontrol-7.2 → accesscontrol-7.4}/COPYRIGHT.txt +0 -0
  23. {accesscontrol-7.2 → accesscontrol-7.4}/HISTORY.rst +0 -0
  24. {accesscontrol-7.2 → accesscontrol-7.4}/LICENSE.txt +0 -0
  25. {accesscontrol-7.2 → accesscontrol-7.4}/README.rst +0 -0
  26. {accesscontrol-7.2 → accesscontrol-7.4}/buildout.cfg +0 -0
  27. {accesscontrol-7.2 → accesscontrol-7.4}/docs/AccessControl.rst +0 -0
  28. {accesscontrol-7.2 → accesscontrol-7.4}/docs/requestmethod.rst +0 -0
  29. {accesscontrol-7.2 → accesscontrol-7.4}/include/Acquisition/Acquisition.h +0 -0
  30. {accesscontrol-7.2 → accesscontrol-7.4}/include/ExtensionClass/ExtensionClass.h +0 -0
  31. {accesscontrol-7.2 → accesscontrol-7.4}/include/ExtensionClass/_compat.h +0 -0
  32. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/AuthEncoding.py +0 -0
  33. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ImplC.py +0 -0
  34. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Implementation.py +0 -0
  35. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Owned.py +0 -0
  36. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Permission.py +0 -0
  37. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/PermissionMapping.py +0 -0
  38. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/PermissionRole.py +0 -0
  39. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Permissions.py +0 -0
  40. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/Role.py +0 -0
  41. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityManagement.py +0 -0
  42. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SecurityManager.py +0 -0
  43. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SimpleObjectPolicies.py +0 -0
  44. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/SpecialUsers.py +0 -0
  45. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/User.py +0 -0
  46. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ZopeGuards.py +0 -0
  47. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/ZopeSecurityPolicy.py +0 -0
  48. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/__init__.py +0 -0
  49. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/_compat.h +0 -0
  50. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/class_init.py +0 -0
  51. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/configure.zcml +0 -0
  52. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/interfaces.py +0 -0
  53. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/logger_wrapper.py +0 -0
  54. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/meta.zcml +0 -0
  55. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/metaconfigure.py +0 -0
  56. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/owner.py +0 -0
  57. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/permissions.zcml +0 -0
  58. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/requestmethod.py +0 -0
  59. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/rolemanager.py +0 -0
  60. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/safe_formatter.py +0 -0
  61. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/security.py +0 -0
  62. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tainted.py +0 -0
  63. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/__init__.py +0 -0
  64. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/actual_python.py +0 -0
  65. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/__init__.py +0 -0
  66. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/submodule/__init__.py +0 -0
  67. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/private_module/__init__.py +0 -0
  68. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/private_module/submodule/__init__.py +0 -0
  69. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/public_module/__init__.py +0 -0
  70. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/public_module/submodule/__init__.py +0 -0
  71. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testClassSecurityInfo.py +0 -0
  72. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testImplementation.py +0 -0
  73. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testModuleSecurity.py +0 -0
  74. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionMapping.py +0 -0
  75. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionRole.py +0 -0
  76. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testSecurityManager.py +0 -0
  77. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZCML.py +0 -0
  78. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/testZopeSecurityPolicy.py +0 -0
  79. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_owner.py +0 -0
  80. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_requestmethod.py +0 -0
  81. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_rolemanager.py +0 -0
  82. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_safe_formatter.py +0 -0
  83. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_safeiter.py +0 -0
  84. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_tainted.py +0 -0
  85. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_userfolder.py +0 -0
  86. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/tests/test_users.py +0 -0
  87. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/unauthorized.py +0 -0
  88. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/userfolder.py +0 -0
  89. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl/users.py +0 -0
  90. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/dependency_links.txt +0 -0
  91. {accesscontrol-7.2 → accesscontrol-7.4}/src/AccessControl.egg-info/entry_points.txt +0 -0
  92. {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/config/c-code
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/"* ]] ; then
50
- "${PYBIN}/pip" install -e /io/
51
- "${PYBIN}/pip" wheel /io/ -w wheelhouse/
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/AccessControl*.whl; do
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/config/c-code
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/config/c-code
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: "5.13.2"
6
+ rev: "8.0.1"
7
7
  hooks:
8
8
  - id: isort
9
9
  - repo: https://github.com/hhatto/autopep8
10
- rev: "v2.3.1"
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.17.0
15
+ rev: v3.21.2
16
16
  hooks:
17
17
  - id: pyupgrade
18
- args: [--py38-plus]
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.1.1"
25
+ rev: "7.3.0"
25
26
  hooks:
26
27
  - id: flake8
27
28
  additional_dependencies:
@@ -1,8 +1,37 @@
1
- Changelog
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/config/c-code
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/config/c-code
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
1
+ Metadata-Version: 2.4
2
2
  Name: AccessControl
3
- Version: 7.2
4
- Summary: Security framework for Zope.
5
- Home-page: https://github.com/zopefoundation/AccessControl
6
- Author: Zope Foundation and Contributors
7
- Author-email: zope-dev@zope.dev
8
- License: ZPL 2.1
9
- Project-URL: Issue Tracker, https://github.com/zopefoundation/AccessControl/issues
10
- Project-URL: Sources, https://github.com/zopefoundation/AccessControl
11
- Keywords: security access authorization
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.8
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.8
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>=4.2.1
35
- Requires-Dist: Persistence>=3.0a3
36
- Requires-Dist: RestrictedPython>=7.4
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
- Changelog
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
@@ -1,6 +1,3 @@
1
- [zest.releaser]
2
- create-wheel = no
3
-
4
1
  [flake8]
5
2
  doctests = 1
6
3
  per-file-ignores =
@@ -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
- try:
737
- container = v.__self__
738
- except AttributeError:
739
- container = aq_parent(aq_inner(v)) or inst
740
-
741
- assertion = Containers(type(container))
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