AccessControl 7.3__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 (91) hide show
  1. {accesscontrol-7.3 → accesscontrol-7.4}/.manylinux-install.sh +12 -5
  2. {accesscontrol-7.3 → accesscontrol-7.4}/.manylinux.sh +2 -2
  3. {accesscontrol-7.3 → accesscontrol-7.4}/.pre-commit-config.yaml +5 -4
  4. {accesscontrol-7.3 → accesscontrol-7.4}/CHANGES.rst +18 -0
  5. {accesscontrol-7.3 → accesscontrol-7.4}/CONTRIBUTING.md +2 -2
  6. {accesscontrol-7.3 → accesscontrol-7.4}/MANIFEST.in +2 -2
  7. accesscontrol-7.4/PKG-INFO +431 -0
  8. {accesscontrol-7.3 → accesscontrol-7.4}/pyproject.toml +13 -6
  9. {accesscontrol-7.3 → accesscontrol-7.4}/setup.cfg +0 -3
  10. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/ImplPython.py +18 -6
  11. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/cAccessControl.c +79 -0
  12. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testZopeGuards.py +57 -0
  13. accesscontrol-7.4/src/AccessControl.egg-info/PKG-INFO +431 -0
  14. {accesscontrol-7.3 → accesscontrol-7.4}/tox.ini +6 -4
  15. accesscontrol-7.3/PKG-INFO +0 -68
  16. accesscontrol-7.3/src/AccessControl.egg-info/PKG-INFO +0 -68
  17. {accesscontrol-7.3 → accesscontrol-7.4}/COPYRIGHT.txt +0 -0
  18. {accesscontrol-7.3 → accesscontrol-7.4}/HISTORY.rst +0 -0
  19. {accesscontrol-7.3 → accesscontrol-7.4}/LICENSE.txt +0 -0
  20. {accesscontrol-7.3 → accesscontrol-7.4}/README.rst +0 -0
  21. {accesscontrol-7.3 → accesscontrol-7.4}/buildout.cfg +0 -0
  22. {accesscontrol-7.3 → accesscontrol-7.4}/docs/AccessControl.rst +0 -0
  23. {accesscontrol-7.3 → accesscontrol-7.4}/docs/requestmethod.rst +0 -0
  24. {accesscontrol-7.3 → accesscontrol-7.4}/include/Acquisition/Acquisition.h +0 -0
  25. {accesscontrol-7.3 → accesscontrol-7.4}/include/ExtensionClass/ExtensionClass.h +0 -0
  26. {accesscontrol-7.3 → accesscontrol-7.4}/include/ExtensionClass/_compat.h +0 -0
  27. {accesscontrol-7.3 → accesscontrol-7.4}/setup.py +0 -0
  28. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/AuthEncoding.py +0 -0
  29. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/ImplC.py +0 -0
  30. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/Implementation.py +0 -0
  31. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/Owned.py +0 -0
  32. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/Permission.py +0 -0
  33. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/PermissionMapping.py +0 -0
  34. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/PermissionRole.py +0 -0
  35. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/Permissions.py +0 -0
  36. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/Role.py +0 -0
  37. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/SecurityInfo.py +0 -0
  38. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/SecurityManagement.py +0 -0
  39. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/SecurityManager.py +0 -0
  40. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/SimpleObjectPolicies.py +0 -0
  41. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/SpecialUsers.py +0 -0
  42. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/User.py +0 -0
  43. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/ZopeGuards.py +0 -0
  44. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/ZopeSecurityPolicy.py +0 -0
  45. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/__init__.py +0 -0
  46. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/_compat.h +0 -0
  47. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/class_init.py +0 -0
  48. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/configure.zcml +0 -0
  49. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/interfaces.py +0 -0
  50. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/logger_wrapper.py +0 -0
  51. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/meta.zcml +0 -0
  52. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/metaconfigure.py +0 -0
  53. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/owner.py +0 -0
  54. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/permissions.zcml +0 -0
  55. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/requestmethod.py +0 -0
  56. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/rolemanager.py +0 -0
  57. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/safe_formatter.py +0 -0
  58. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/security.py +0 -0
  59. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tainted.py +0 -0
  60. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/__init__.py +0 -0
  61. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/actual_python.py +0 -0
  62. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/__init__.py +0 -0
  63. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/mixed_module/submodule/__init__.py +0 -0
  64. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/private_module/__init__.py +0 -0
  65. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/private_module/submodule/__init__.py +0 -0
  66. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/public_module/__init__.py +0 -0
  67. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/public_module/submodule/__init__.py +0 -0
  68. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testClassSecurityInfo.py +0 -0
  69. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testImplementation.py +0 -0
  70. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testModuleSecurity.py +0 -0
  71. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionMapping.py +0 -0
  72. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testPermissionRole.py +0 -0
  73. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testSecurityManager.py +0 -0
  74. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testZCML.py +0 -0
  75. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/testZopeSecurityPolicy.py +0 -0
  76. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_owner.py +0 -0
  77. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_requestmethod.py +0 -0
  78. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_rolemanager.py +0 -0
  79. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_safe_formatter.py +0 -0
  80. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_safeiter.py +0 -0
  81. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_tainted.py +0 -0
  82. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_userfolder.py +0 -0
  83. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/tests/test_users.py +0 -0
  84. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/unauthorized.py +0 -0
  85. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/userfolder.py +0 -0
  86. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl/users.py +0 -0
  87. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl.egg-info/SOURCES.txt +0 -0
  88. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl.egg-info/dependency_links.txt +0 -0
  89. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl.egg-info/entry_points.txt +0 -0
  90. {accesscontrol-7.3 → accesscontrol-7.4}/src/AccessControl.egg-info/requires.txt +0 -0
  91. {accesscontrol-7.3 → 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
 
@@ -33,6 +33,7 @@ tox_env_map() {
33
33
  *"cp312"*) echo 'py312';;
34
34
  *"cp313"*) echo 'py313';;
35
35
  *"cp314"*) echo 'py314';;
36
+ *"cp315"*) echo 'py315';;
36
37
  *) echo 'py';;
37
38
  esac
38
39
  }
@@ -44,9 +45,15 @@ for PYBIN in /opt/python/*/bin; do
44
45
  [[ "${PYBIN}" == *"cp311/"* ]] || \
45
46
  [[ "${PYBIN}" == *"cp312/"* ]] || \
46
47
  [[ "${PYBIN}" == *"cp313/"* ]] || \
47
- [[ "${PYBIN}" == *"cp314/"* ]] ; then
48
- "${PYBIN}/pip" install -e /io/
49
- "${PYBIN}/pip" wheel /io/ -w wheelhouse/
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
50
57
  if [ `uname -m` == 'aarch64' ]; then
51
58
  cd /io/
52
59
  ${PYBIN}/pip install tox
@@ -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,9 +1,9 @@
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: "7.0.0"
6
+ rev: "8.0.1"
7
7
  hooks:
8
8
  - id: isort
9
9
  - repo: https://github.com/hhatto/autopep8
@@ -12,7 +12,7 @@ repos:
12
12
  - id: autopep8
13
13
  args: [--in-place, --aggressive, --aggressive]
14
14
  - repo: https://github.com/asottile/pyupgrade
15
- rev: v3.21.0
15
+ rev: v3.21.2
16
16
  hooks:
17
17
  - id: pyupgrade
18
18
  args: [--py310-plus]
@@ -20,6 +20,7 @@ repos:
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
25
  rev: "7.3.0"
25
26
  hooks:
@@ -4,6 +4,24 @@ Change log
4
4
  For changes before version 3.0, see ``HISTORY.rst``.
5
5
 
6
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
+
7
25
  7.3 (2025-11-16)
8
26
  ----------------
9
27
 
@@ -1,6 +1,6 @@
1
1
  <!--
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
  # Contributing to zopefoundation projects
6
6
 
@@ -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
@@ -0,0 +1,431 @@
1
+ Metadata-Version: 2.4
2
+ Name: AccessControl
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
+ Classifier: Development Status :: 6 - Mature
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Framework :: Zope
15
+ Classifier: Framework :: Zope :: 5
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Programming Language :: Python :: Implementation :: CPython
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/x-rst
28
+ License-File: LICENSE.txt
29
+ Requires-Dist: Acquisition
30
+ Requires-Dist: AuthEncoding
31
+ Requires-Dist: BTrees
32
+ Requires-Dist: DateTime
33
+ Requires-Dist: ExtensionClass
34
+ Requires-Dist: Persistence
35
+ Requires-Dist: RestrictedPython
36
+ Requires-Dist: transaction
37
+ Requires-Dist: zExceptions
38
+ Requires-Dist: zope.component
39
+ Requires-Dist: zope.configuration
40
+ Requires-Dist: zope.deferredimport
41
+ Requires-Dist: zope.interface
42
+ Requires-Dist: zope.publisher
43
+ Requires-Dist: zope.schema
44
+ Requires-Dist: zope.security
45
+ Requires-Dist: zope.testing
46
+ Provides-Extra: test
47
+ Requires-Dist: zope.testrunner>=6.4; extra == "test"
48
+ Dynamic: license-file
49
+
50
+ .. image:: https://github.com/zopefoundation/AccessControl/actions/workflows/tests.yml/badge.svg
51
+ :target: https://github.com/zopefoundation/AccessControl/actions/workflows/tests.yml
52
+
53
+ .. image:: https://coveralls.io/repos/github/zopefoundation/AccessControl/badge.svg?branch=master
54
+ :target: https://coveralls.io/github/zopefoundation/AccessControl?branch=master
55
+
56
+ .. image:: https://img.shields.io/pypi/v/AccessControl.svg
57
+ :target: https://pypi.org/project/AccessControl/
58
+ :alt: Current version on PyPI
59
+
60
+ .. image:: https://img.shields.io/pypi/pyversions/AccessControl.svg
61
+ :target: https://pypi.org/project/AccessControl/
62
+ :alt: Supported Python versions
63
+
64
+
65
+ AccessControl
66
+ =============
67
+
68
+ AccessControl provides a general security framework for use in Zope.
69
+
70
+ Change log
71
+ ==========
72
+
73
+ For changes before version 3.0, see ``HISTORY.rst``.
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
+
104
+ 7.2 (2024-11-03)
105
+ ----------------
106
+
107
+ - Prevent untrusted access to ``AccessControl.userfolder.UserFolder.data``
108
+ (fixes `GHSA-g5vw-3h65-2q3v <https://github.com/zopefoundation/AccessControl/security/advisories/GHSA-g5vw-3h65-2q3v>`_).
109
+
110
+
111
+ 7.1 (2024-10-10)
112
+ ----------------
113
+
114
+ - Add final support for Python 3.13.
115
+
116
+ - Respect ``PURE_PYTHON`` environment variable set to ``0`` when running tests.
117
+
118
+ - Let the roles access in ``rolesForPermissionOn`` interpret ``AttributeError``
119
+ and ``Unauthorized`` as "no roles definition for this permission at this
120
+ object" and report any other exception (for the Python and C implementation).
121
+ We have to treat ``Unauthorized`` like ``AttributeError`` to support
122
+ ``Shared.DC.Scripts.Bindings.UnauthorizedBinding`` which raises
123
+ ``Unauthorized`` for any access.
124
+
125
+
126
+ 7.0 (2024-05-30)
127
+ ----------------
128
+
129
+ - Add preliminary support for Python 3.13 as of 3.13b1.
130
+
131
+ - Remove support for Python 3.7.
132
+
133
+ - Build Windows wheels on GHA.
134
+
135
+ - Make dict views (`.keys()`, `.items()` and `.values()`) behave like their
136
+ unrestricted versions.
137
+ (`#147 <https://github.com/zopefoundation/AccessControl/pull/147>`_)
138
+
139
+ - Make `.items()` validate each keys and values, like `.keys()` and
140
+ `.values()` do.
141
+
142
+ - Fix build errors on recent macOS versions.
143
+
144
+
145
+ 6.3 (2023-11-20)
146
+ ----------------
147
+
148
+ - Add support for Python 3.12.
149
+
150
+
151
+ 6.2 (2023-09-04)
152
+ ----------------
153
+
154
+ - Fix information disclosure through ``str.format_map``.
155
+ (CVE-2023-41050)
156
+
157
+
158
+ 6.1 (2023-05-22)
159
+ ----------------
160
+ - Update C header files for ``ExtensionClass`` and ``Acquisition``
161
+ from the original packages where needed.
162
+ (`#140 <https://github.com/zopefoundation/AccessControl/issues/140>`_)
163
+
164
+ - Add preliminary support for Python 3.12a5.
165
+
166
+
167
+ 6.0 (2023-01-12)
168
+ ----------------
169
+
170
+ - Build Linux binary wheels for Python 3.11
171
+
172
+ - Drop support for Python 2.7, 3.5, 3.6.
173
+
174
+
175
+ 5.7 (2022-11-17)
176
+ ----------------
177
+
178
+ - Add support for building arm64 wheels on macOS.
179
+
180
+
181
+ 5.6 (2022-11-03)
182
+ ----------------
183
+
184
+ - Add support for final Python 3.11 release.
185
+
186
+
187
+ 5.5 (2022-10-10)
188
+ ----------------
189
+
190
+ - Switch from ``-Ofast`` to ``-O3`` when compiling code for Linux wheels.
191
+ (`#133 <https://github.com/zopefoundation/AccessControl/pull/133>`_)
192
+
193
+ - Add support for Python 3.11 (as of 3.11.0rc2).
194
+
195
+
196
+ 5.4 (2022-08-26)
197
+ ----------------
198
+
199
+ - Add support for Python 3.11 (as of 3.11.0b5).
200
+
201
+ - Support ``default`` argument in ``next`` built-in function.
202
+ (`#131 <https://github.com/zopefoundation/AccessControl/pull/131>`_)
203
+
204
+
205
+ 5.3.1 (2022-03-29)
206
+ ------------------
207
+
208
+ - Prevent race condition in guarded_import
209
+ (`#123 <https://github.com/zopefoundation/AccessControl/issues/123>`_)
210
+
211
+
212
+ 5.3 (2022-02-25)
213
+ ----------------
214
+
215
+ - Provide ``AccessControl.get_safe_globals`` to facilitate safe use.
216
+
217
+ - Honor ``PURE_PYTHON`` environment variable to enable python implementation
218
+ during runtime.
219
+
220
+ - Add support for Python 3.10.
221
+
222
+
223
+ 5.2 (2021-07-30)
224
+ ----------------
225
+
226
+ - Fix Appveyor configuration so tests can run and wheels build.
227
+
228
+
229
+ 5.1 (2021-07-30)
230
+ ----------------
231
+ NOTE: This release has been yanked from PyPI due to wheel build issues.
232
+
233
+ - Fix a remote code execution issue by preventing access to
234
+ ``string.Formatter`` from restricted code.
235
+
236
+
237
+ 5.0 (2020-10-07)
238
+ ----------------
239
+
240
+ - Add support for Python 3.9.
241
+
242
+ - Remove deprecated classes and functions in
243
+ (see `#32 <https://github.com/zopefoundation/AccessControl/issues/32>`_):
244
+
245
+ + ``AccessControl/DTML.py``
246
+ + ``AccessControl/Owned.py``
247
+ + ``AccessControl/Role.py``
248
+ + ``AccessControl/Permissions.py``
249
+
250
+ - Add deprecation warnings for BBB imports in:
251
+
252
+ + ``AccessControl/AuthEncoding.py``
253
+ + ``AccessControl/Owned.py``
254
+ + ``AccessControl/Role.py``
255
+ + ``AccessControl/User.py``
256
+
257
+ - Although this version might run on Zope 4, it is no longer supported because
258
+ of the dropped deprecation warnings.
259
+
260
+
261
+ 4.2 (2020-04-20)
262
+ ----------------
263
+
264
+ - Add missing permission ``Manage WebDAV Locks``
265
+
266
+ - Fix regression for BBB import of ```users.UnrestrictedUser``
267
+ (`#94 <https://github.com/zopefoundation/AccessControl/issues/94>`_)
268
+
269
+ - Add a check if database is present in ``.owner.ownerInfo``.
270
+ (`#91 <https://github.com/zopefoundation/AccessControl/issues/91>`_).
271
+
272
+
273
+ 4.1 (2019-09-02)
274
+ ----------------
275
+
276
+ - Python 3: Allow iteration over the result of ``dict.{keys,values,items}``
277
+ (`#89 <https://github.com/zopefoundation/AccessControl/issues/89>`_).
278
+
279
+
280
+ 4.0 (2019-05-08)
281
+ ----------------
282
+
283
+ Changes since 3.0.12:
284
+
285
+ - Add support for Python 3.5, 3.6, 3.7 and 3.8.
286
+
287
+ - Restore simple access to bytes methods in Python 3
288
+ (`#83 <https://github.com/zopefoundation/AccessControl/issues/83>`_)
289
+
290
+ - Clarify deprecation warnings for several BBB shims.
291
+ (`#32 <https://github.com/zopefoundation/AccessControl/issues/32>`_)
292
+
293
+ - Add a test to prove that a user folder flag cannot be acquired elsewhere.
294
+ (`#7 <https://github.com/zopefoundation/AccessControl/issues/7>`_)
295
+
296
+ - Tighten basic auth string handling in ``BasicUserFolder.identify``
297
+ (`#56 <https://github.com/zopefoundation/AccessControl/issues/56>`_)
298
+
299
+ - Prevent the Zope 4 ZMI from showing an add dialog for the user folder.
300
+ (`#82 <https://github.com/zopefoundation/AccessControl/issues/82>`_)
301
+
302
+ - Fix order of roles returned by
303
+ ``AccessControl.rolemanager.RoleManager.userdefined_roles``.
304
+
305
+ - Add configuration for `zodbupdate`.
306
+
307
+ - Add ``TaintedBytes`` besides ``TaintedString`` in ``AccessControl.tainted``.
308
+ (`#57 <https://github.com/zopefoundation/AccessControl/issues/57>`_)
309
+
310
+ - Security fix: In ``str.format``, check the security for attributes that are
311
+ accessed. (Ported from 2.13).
312
+
313
+ - Port ``override_container`` context manager here from 2.13.
314
+
315
+ - Add AppVeyor configuration to automate building Windows eggs.
316
+
317
+ - Fix for compilers that only support C89 syntax (e.g. on Windows).
318
+
319
+ - Sanitize and test `RoleManager` role handling.
320
+
321
+ - Depend on RestrictedPython >= 4.0.
322
+
323
+ - #16: Fixed permission handling by avoiding column and row numbers as
324
+ identifiers for permissions and roles.
325
+
326
+ - Extract ``.AuthEncoding`` to its own package for reuse.
327
+
328
+ - Declare missing dependency on BTrees.
329
+
330
+ - Drop `Record` dependency, which now does its own security declaration.
331
+
332
+ - Remove leftovers from history support dropped in Zope.
333
+
334
+ - Remove duplicate guard against * imports.
335
+ (`#60 <https://github.com/zopefoundation/AccessControl/issues/60>`_)
336
+
337
+
338
+ 3.0.12 (2015-12-21)
339
+ -------------------
340
+
341
+ - Avoid acquiring ``access`` from module wrapped by
342
+ ``SecurityInfo._ModuleSecurityInfo``. See:
343
+ https://github.com/zopefoundation/AccessControl/issues/12
344
+
345
+
346
+ 3.0.11 (2014-11-02)
347
+ -------------------
348
+
349
+ - Harden test fix for machines that do not define `localhost`.
350
+
351
+
352
+ 3.0.10 (2014-11-02)
353
+ -------------------
354
+
355
+ - Test fix for machines that do not define `localhost`.
356
+
357
+
358
+ 3.0.9 (2014-08-08)
359
+ ------------------
360
+
361
+ - GitHub #6: Do not pass SecurityInfo instance itself to declarePublic/declarePrivate
362
+ when using the public/private decorator. This fixes ``Conflicting security declarations``
363
+ warnings on Zope startup.
364
+
365
+ - LP #1248529: Leave existing security manager in place inside
366
+ ``RoleManager.manage_getUserRolesAndPermissions``.
367
+
368
+
369
+ 3.0.8 (2013-07-16)
370
+ ------------------
371
+
372
+ - LP #1169923: ensure initialization of shared ``ImplPython`` state
373
+ (used by ``ImplC``) when using the "C" security policy. Thanks to
374
+ Arnaud Fontaine for the patch.
375
+
376
+
377
+ 3.0.7 (2013-05-14)
378
+ ------------------
379
+
380
+ - Remove long-deprecated 'Shared' roles support (pre-dates Zope, never
381
+ used by Zope itself)
382
+
383
+ - Prevent infinite loop when looking up local roles in an acquisition chain
384
+ with cycles.
385
+
386
+
387
+ 3.0.6 (2012-10-31)
388
+ ------------------
389
+
390
+ - LP #1071067: Use a stronger random number generator and a constant time
391
+ comparison function.
392
+
393
+
394
+ 3.0.5 (2012-10-21)
395
+ ------------------
396
+
397
+ - LP #966101: Recognize special `zope2.Private` permission in ZCML
398
+ role directive.
399
+
400
+
401
+ 3.0.4 (2012-09-09)
402
+ ------------------
403
+
404
+ - LP #1047318: Tighten import restrictions for restricted code.
405
+
406
+
407
+ 3.0.3 (2012-08-23)
408
+ ------------------
409
+
410
+ - Fix a bug in ZopeSecurityPolicy.py. Global variable `rolesForPermissionOn`
411
+ could be overridden if `__role__` had custom rolesForPermissionOn.
412
+
413
+
414
+ 3.0.2 (2012-06-22)
415
+ ------------------
416
+
417
+ - Add Anonymous as a default role for Public permission.
418
+
419
+
420
+ 3.0.1 (2012-05-24)
421
+ ------------------
422
+
423
+ - Fix tests under Python 2.6.
424
+
425
+
426
+ 3.0 (2012-05-12)
427
+ ----------------
428
+
429
+ - Added decorators for public, private and protected security declarations.
430
+
431
+ - Update tests to take advantage of automatic test suite discovery.
@@ -1,7 +1,5 @@
1
- #
2
- # Generated from:
3
- # https://github.com/zopefoundation/meta/tree/master/config/c-code
4
-
1
+ # Generated with zope.meta (https://zopemeta.readthedocs.io/) from:
2
+ # https://github.com/zopefoundation/meta/tree/master/src/zope/meta/c-code
5
3
  [build-system]
6
4
  requires = [
7
5
  "setuptools",
@@ -11,10 +9,10 @@ build-backend = "setuptools.build_meta"
11
9
 
12
10
  [project]
13
11
  name = "AccessControl"
14
- version = "7.3"
12
+ version = "7.4"
15
13
  description = "Security framework for Zope"
16
14
  keywords = ["security", "access", "authorization"]
17
- readme = "README.rst"
15
+ dynamic = ["readme"]
18
16
  requires-python = ">=3.10"
19
17
  license = "ZPL-2.1"
20
18
  authors = [
@@ -102,3 +100,12 @@ source = [
102
100
  ".tox/*/lib/python*/site-packages/",
103
101
  ".tox/pypy*/site-packages/",
104
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 =
@@ -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