Release 0.6.0 - Python 3 only!
Major release removing Python 2 support. This allow both code cleanup
and new features, such as:
- Support for pathlib objects in
apply_to
andhas_extended
functions when running with Python 3.6 and newer. - Use of built-in C API functions for bytes/unicode/pathlib conversion when dealing with file names, removing custom code (with the
associated benefits).
Important API changes/bug fixes:
- Initialisation protocol has been changed, to disallow uninitialised objects; this means that
__new__
will always create valid objects,
to prevent the need for checking initialisation status in all code paths; this also (implicitly) fixes memory leaks on re-initialisation
(calling__init__(…)
on an existing object) and segfaults (!) on non-initialised object attribute access. Note ACL re-initialisation is
tricky and (still) leads to undefined behaviour of existing Entry objects pointing to it. - Fix another bug in ACL re-initialisation where failures would result in invalid objects; now failed re-initialisation does not touch the
original object. - Restore
__setstate__
/__getstate__
support on Linux; this was inadvertently removed due a typo(!) when adding support for it in
FreeBSD. Pickle should work again for ACL instances, although not sure how stable this serialisation format actually is. - Additionally, slightly change
__setstate__()
input to not allow Unicode, since the serialisation format is an opaque binary format. - Fix (and change) entry qualifier (which is a user/group ID) behaviour: assume/require that uid_t/gid_t are unsigned types (they are with
glibc, MacOS and FreeBSD at least; the standard doesn't document the signedness), and convert parsing and returning the qualifier to behave accordingly. The breakage was most apparent on 32-bit architectures, in which context the problem was originally reported (see issue #13).
Minor improvements:
- Added a
data
keyword argument toACL()
, which allows restoring an ACL directly from a serialised form (as given by__getstate__()
),
which should simplify some uses cases (a = ACL(); a.__setstate__(…)
). - When available, add the file path to I/O error messages, which should lead to easier debugging.
- The test suite has changed to
pytest
, which allows increased coverage via parameterisation.