9 Major release removing Python 2 support. This allow both code cleanup
10 and new features, such as:
12 - Support for pathlib objects in `apply_to` and `has_extended`
13 functions when running with Python 3.6 and newer.
14 - Use of built-in C API functions for bytes/unicode/pathlib conversion
15 when dealing with file names, removing custom code (with the
18 Important API changes/bug fixes:
20 - Initialisation protocol has been changed, to disallow uninitialised
21 objects; this means that `__new__` will always create valid objects,
22 to prevent the need for checking initialisation status in all code
23 paths; this also (implicitly) fixes memory leaks on re-initialisation
24 (calling `__init__(…)` on an existing object) and segfaults (!) on
25 non-initialised object attribute access. Note ACL re-initialisation is
26 tricky and (still) leads to undefined behaviour of existing Entry
27 objects pointing to it.
28 - Restore `__setstate__`/`__getstate__` support on Linux; this was
29 inadvertently removed due a typo(!) when adding support for it in
30 FreeBSD. Pickle should work again for ACL instances, although not sure
31 how stable this serialisation format actually is.
32 - Additionally, slightly change `__setstate__()` input to not allow
33 Unicode, since the serialisation format is an opaque binary format.
34 - Fix (and change) entry qualifier (which is a user/group ID) behaviour:
35 assume/require that uid_t/gid_t are unsigned types (they are with
36 glibc, MacOS and FreeBSD at least; the standard doesn't document the
37 signedness), and convert parsing and returning the qualifier to behave
38 accordingly. The breakage was most apparent on 32-bit architectures,
39 in which context the problem was originally reported (see issue #13).
43 - When available, add the file path to I/O error messages, which should
44 lead to easier debugging.
45 - The test suite has changed to `pytest`, which allows increased
46 coverage via parameterisation.
52 *released Thu, 14 Nov 2019*
56 - Switch build system to Python 3 by default (can be overridden if
58 - Internal improvements for better cpychecker support.
59 - Fix compatibility with PyPy.
60 - Test improvements (both local and on Travis), testing more variations
62 - Improve test coverage, and allow gathering test coverage results.
63 - Drop support (well, drop testing) for Python lower than 2.7.
64 - Minor documentation improvements (closes #9, #12).
69 *released Thu, 30 Apr 2015*
73 - Enable all FreeBSD versions after 7.x at level 2 (thanks to Garrett
75 - Make test suite pass under FreeBSD, which has a stricter behaviour
76 with regards to invalid ACLs (which we do exercise in the test suite),
77 thanks again to Garret for the bug reports.
82 *released Sat, 24 May 2014*
84 No visible changes release: just fix tests when running under pypy.
89 *released Sun, 13 May 2012*
91 A bug-fix only release. Critical bugs (memory leaks and possible
92 segmentation faults) have been fixed thanks to Dave Malcolm and his
93 ``cpychecker`` tool. Additionally, some compatibility issues with Python
94 3.x have been fixed (str() methods returning bytes).
96 The documentation has been improved and changed from epydoc to sphinx;
97 note however that the documentation is still auto-generated from the
100 Project reorganisation: the project home page has been moved from
101 SourceForge to GitHub.
107 *released Sun, 27 Dec 2009*
109 Added support for Python 3.x and improved support for Unicode filenames.
114 *released Sat, 28 Jun 2008*
119 Starting with this version, pylibacl is licensed under LGPL 2.1,
120 Febryary 1999 or any later versions (see README.rst and COPYING).
125 A few more Linux-specific functions:
127 - add the ACL.equiv_mode() method, which will return the equivalent
128 octal mode if this is a basic ACL and raise an IOError exception
131 - add the acl_extended(...) function, which will check if an fd or path
137 FreeBSD 7.x will have almost all the acl manipulation functions that
138 Linux has, with the exception of __getstate__/__setstate__. As a
139 workaround, use the str() and ACL(text=...) methods to pass around
140 textual representations.
145 At module level there are now a few constants exported for easy-checking
146 at runtime what features have been compiled in:
148 - HAS_ACL_FROM_MODE, denoting whether the ACL constructor supports the
151 - HAS_ACL_CHECK, denoting whether ACL instances support the check()
154 - HAS_ACL_ENTRY, denoting whether ACL manipulation is possible and the
155 Entry and Permset classes are available
157 - HAS_EXTENEDED_CHECK, denoting whether the acl_extended function is
160 - HAS_EQUIV_MODE, denoting whether ACL instances support the
166 Many functions have now unittests, which is a good thing.
172 *released Sun, 21 Oct 2007*
177 Under Linux, implement more functions from libacl:
179 - add ACL(mode=...), implementing acl_from_mode
180 - add ACL().to_any_text, implementing acl_to_any_text
181 - add ACL comparison, using acl_cmp
182 - add ACL().check, which is a more descriptive function than validate