update changelog
[platform/upstream/acl.git] / include / acl.h
1 /*
2   File: sys/acl.h
3
4   (C) 1999 Andreas Gruenbacher, <a.gruenbacher@computer.org>
5
6   This program is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Lesser General Public
8   License as published by the Free Software Foundation; either
9   version 2.1 of the License, or (at your option) any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with this library; if not, write to the Free Software
18   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 #ifndef __SYS_ACL_H
22 #define __SYS_ACL_H
23
24 #include <sys/types.h>
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 /*=== Data types ===*/
31
32 struct __acl_ext;
33 struct __acl_entry_ext;
34 struct __acl_permset_ext;
35
36 typedef unsigned int            acl_type_t;
37 typedef int                     acl_tag_t;
38 typedef unsigned int            acl_perm_t;
39
40 typedef struct __acl_ext        *acl_t;
41 typedef struct __acl_entry_ext  *acl_entry_t;
42 typedef struct __acl_permset_ext *acl_permset_t;
43
44 /*=== Constants ===*/
45
46 /* 23.2.2 acl_perm_t values */
47
48 #define ACL_READ                (0x04)
49 #define ACL_WRITE               (0x02)
50 #define ACL_EXECUTE             (0x01)
51 //#define ACL_ADD               (0x08)
52 //#define ACL_DELETE            (0x10)
53
54 /* 23.2.5 acl_tag_t values */
55
56 #define ACL_UNDEFINED_TAG       (0x00)
57 #define ACL_USER_OBJ            (0x01)
58 #define ACL_USER                (0x02)
59 #define ACL_GROUP_OBJ           (0x04)
60 #define ACL_GROUP               (0x08)
61 #define ACL_MASK                (0x10)
62 #define ACL_OTHER               (0x20)
63
64 /* 23.3.6 acl_type_t values */
65
66 #define ACL_TYPE_ACCESS         (0x8000)
67 #define ACL_TYPE_DEFAULT        (0x4000)
68
69 /* 23.2.7 ACL qualifier constants */
70
71 #define ACL_UNDEFINED_ID        ((id_t)-1)
72
73 /* 23.2.8 ACL Entry Constants */
74
75 #define ACL_FIRST_ENTRY         0
76 #define ACL_NEXT_ENTRY          1
77
78 /*=== ACL manipulation ===*/
79
80 extern acl_t acl_init(int count);
81 extern acl_t acl_dup(acl_t acl);
82 extern int acl_free(void *obj_p);
83 extern int acl_valid(acl_t acl);
84
85 /*=== Entry manipulation ===*/
86
87 extern int
88 acl_copy_entry(acl_entry_t dest_d, acl_entry_t src_d);
89 extern int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p);
90 extern int acl_delete_entry(acl_t acl, acl_entry_t entry_d);
91 extern int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p);
92
93 /* Manipulate ACL entry permissions */
94
95 extern int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm);
96 extern int acl_calc_mask(acl_t *acl_p);
97 extern int acl_clear_perms(acl_permset_t permset_d);
98 extern int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm);
99 extern int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p);
100 extern int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d);
101
102 /* Manipulate ACL entry tag type and qualifier */
103
104 extern void * acl_get_qualifier(acl_entry_t entry_d);
105 extern int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p);
106 extern int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p);
107 extern int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type);
108
109 /*=== Format translation ===*/
110
111 extern ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size);
112 extern acl_t acl_copy_int(const void *buf_p);
113 extern acl_t acl_from_text(const char *buf_p);
114 extern ssize_t acl_size(acl_t acl);
115 extern char *acl_to_text(acl_t acl, ssize_t *len_p);
116
117 /*=== Object manipulation ===*/
118
119 extern int acl_delete_def_file(const char *path_p);
120 extern acl_t acl_get_fd(int fd);
121 extern acl_t acl_get_file(const char *path_p, acl_type_t type);
122 extern int acl_set_fd(int fd, acl_t acl);
123 extern int acl_set_file(const char *path_p, acl_type_t type, acl_t acl);
124
125 #ifdef __cplusplus
126 }
127 #endif
128
129 #endif  /* __SYS_ACL_H */
130