Imported Upstream version 0.5.0
[debian-pylibacl.git] / IMPLEMENTATION
1 Functionality level
2 -------------------
3
4 The IEEE 1003.1e draft 17 ("POSIX.1e") describes a set of 28 functions.
5 These are grouped into three groups, based on their portability:
6
7 - first group, the most portable one. All systems which claim to support
8   POSIX.1e should implement these:
9
10      acl_delete_def_file(3), acl_dup(3), acl_free(3), acl_from_text(3),
11      acl_get_fd(3), acl_get_file(3), acl_init(3), acl_set_fd(3),
12      acl_set_file(3), acl_to_text(3), acl_valid(3)
13
14 - second group, containing the rest of the POSIX ACL functions. Systems
15   which claim to fully implement POSIX.1e should implement these:
16
17      acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3),
18      acl_copy_entry(3), acl_copy_ext(3), acl_copy_int(3),
19      acl_create_entry(3), acl_delete_entry(3), acl_delete_perm(3),
20      acl_get_entry(3), acl_get_permset(3), acl_get_qualifier(3),
21      acl_get_tag_type(3), acl_set_permset(3), acl_set_qualifier(3),
22      acl_set_tag_type(3), acl_size(3)
23
24 - third group, containing extra functions implemented by each OS. These
25   are non-portable version. Both Linux and FreeBSD implement some extra
26   functions.
27
28 Thus we have the level of compliance. Depending on whether the system
29 library support the second group, you get some extra methods for the ACL
30 object.
31
32 The implementation of the second group of function can be tested by
33 checking the module-level constant HAS_ACL_ENTRY. The extra
34 functionality available on Linux can be tested by additional HAS_*
35 constants.
36
37 Internal structure
38 ------------------
39
40 The POSIX draft has the following stuff (correct me if I'm wrong):
41
42 - an ACL is denoted by acl_t
43 - an ACL contains many acl_entry_t, these are the individual entries in
44   the list; they always(!) belong to an acl_t
45 - each entry_t has a qualifier (think uid_t or gid_t), whose type is
46   denoted by the acl_tag_t type, and an acl_permset_t
47 - the acl_permset_t can contain acl_perm_t value (ACL_READ, ACL_WRITE,
48   ACL_EXECUTE, ACL_ADD, ACL_DELETE, ...)
49 - functions to manipulate all these, and functions to manipulate files