]> git.k1024.org Git - pylibacl.git/blob - NEWS.md
Bump minimum Python version to 3.7
[pylibacl.git] / NEWS.md
1 # News
2
3 ## Version 0.6.0
4
5 *Sun, 29 Nov 2020*
6
7 Major release removing Python 2 support. This allow both code cleanup
8 and new features, such as:
9
10 - Support for pathlib objects in `apply_to` and `has_extended`
11   functions when running with Python 3.6 and newer.
12 - Use of built-in C API functions for bytes/unicode/pathlib conversion
13   when dealing with file names, removing custom code (with the
14   associated benefits).
15
16 Important API changes/bug fixes:
17
18 - Initialisation protocol has been changed, to disallow uninitialised
19   objects; this means that `__new__` will always create valid objects,
20   to prevent the need for checking initialisation status in all code
21   paths; this also (implicitly) fixes memory leaks on re-initialisation
22   (calling `__init__(…)` on an existing object) and segfaults (!) on
23   non-initialised object attribute access. Note ACL re-initialisation is
24   tricky and (still) leads to undefined behaviour of existing Entry
25   objects pointing to it.
26 - Fix another bug in ACL re-initialisation where failures would result
27   in invalid objects; now failed re-initialisation does not touch the
28   original object.
29 - Restore `__setstate__`/`__getstate__` support on Linux; this was
30   inadvertently removed due a typo(!) when adding support for it in
31   FreeBSD. Pickle should work again for ACL instances, although not sure
32   how stable this serialisation format actually is.
33 - Additionally, slightly change `__setstate__()` input to not allow
34   Unicode, since the serialisation format is an opaque binary format.
35 - Fix (and change) entry qualifier (which is a user/group ID) behaviour:
36   assume/require that uid_t/gid_t are unsigned types (they are with
37   glibc, MacOS and FreeBSD at least; the standard doesn't document the
38   signedness), and convert parsing and returning the qualifier to behave
39   accordingly. The breakage was most apparent on 32-bit architectures,
40   in which context the problem was originally reported (see issue #13).
41
42 Minor improvements:
43
44 - Added a `data` keyword argument to `ACL()`, which allows restoring an
45   ACL directly from a serialised form (as given by `__getstate__()`),
46   which should simplify some uses cases (`a = ACL(); a.__set
47   state__(…)`).
48 - When available, add the file path to I/O error messages, which should
49   lead to easier debugging.
50 - The test suite has changed to `pytest`, which allows increased
51   coverage via parameterisation.
52
53 ## Version 0.5.4
54
55 *released Thu, 14 Nov 2019*
56
57 Maintenance release:
58
59 - Switch build system to Python 3 by default (can be overridden if
60   needed).
61 - Internal improvements for better cpychecker support.
62 - Fix compatibility with PyPy.
63 - Test improvements (both local and on Travis), testing more variations
64   (debug, PyPy).
65 - Improve test coverage, and allow gathering test coverage results.
66 - Drop support (well, drop testing) for Python lower than 2.7.
67 - Minor documentation improvements (closes #9, #12).
68
69 ## Version 0.5.3
70
71 *released Thu, 30 Apr 2015*
72
73 FreeBSD fixes:
74
75 - Enable all FreeBSD versions after 7.x at level 2 (thanks to Garrett
76   Cooper).
77 - Make test suite pass under FreeBSD, which has a stricter behaviour
78   with regards to invalid ACLs (which we do exercise in the test suite),
79   thanks again to Garret for the bug reports.
80
81 ## Version 0.5.2
82
83 *released Sat, 24 May 2014*
84
85 No visible changes release: just fix tests when running under pypy.
86
87 ## Version 0.5.1
88
89 *released Sun, 13 May 2012*
90
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).
95
96 The documentation has been improved and changed from epydoc to sphinx;
97 note however that the documentation is still auto-generated from the
98 docstrings.
99
100 Project reorganisation: the project home page has been moved from
101 SourceForge to GitHub.
102
103 ## Version 0.5
104
105 *released Sun, 27 Dec 2009*
106
107 Added support for Python 3.x and improved support for Unicode filenames.
108
109 ## Version 0.4
110
111 *released Sat, 28 Jun 2008*
112
113 ### License
114
115
116 Starting with this version, pylibacl is licensed under LGPL 2.1,
117 Febryary 1999 or any later versions (see README.rst and COPYING).
118
119 ### Linux support
120
121 A few more Linux-specific functions:
122
123 - add the ACL.equiv_mode() method, which will return the equivalent
124   octal mode if this is a basic ACL and raise an IOError exception
125   otherwise
126
127 - add the acl_extended(...) function, which will check if an fd or path
128   has an extended ACL
129
130 ### FreeBSD support
131
132 FreeBSD 7.x will have almost all the acl manipulation functions that
133 Linux has, with the exception of __getstate__/__setstate__. As a
134 workaround, use the str() and ACL(text=...) methods to pass around
135 textual representations.
136
137 ### Interface
138
139 At module level there are now a few constants exported for easy-checking
140 at runtime what features have been compiled in:
141
142 - `HAS_ACL_FROM_MODE`, denoting whether the ACL constructor supports
143   the `mode=0xxx` parameter
144
145 - `HAS_ACL_CHECK`, denoting whether ACL instances support the
146   `check()` method
147
148 - `HAS_ACL_ENTRY`, denoting whether ACL manipulation is possible and
149   the Entry and Permset classes are available
150
151 - `HAS_EXTENEDED_CHECK`, denoting whether the `acl_extended()`
152   function is supported
153
154 - `HAS_EQUIV_MODE`, denoting whether ACL instances support the
155   `equiv_mode()` method
156
157 ### Internals
158
159 Many functions have now unittests, which is a good thing.
160
161
162 ## Version 0.3
163
164 *released Sun, 21 Oct 2007*
165
166 ### Linux support
167
168 Under Linux, implement more functions from libacl:
169
170 - add `ACL(mode=...)`, implementing `acl_from_mode`.
171 - add `ACL.to_any_text()`, implementing `acl_to_any_text`.
172 - add ACL comparison, using `acl_cmp`.
173 - add `ACL.check()`, which is a more descriptive function than
174   validate.