1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef _CONFIG_ACL_H
30 #define _CONFIG_ACL_H
31
32 #include "conf.h"
33 #include <inttypes.h>
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #define CFG_ACE_ADD(list_begin, elm) \
40 cx_linked_list_add((
void**)list_begin,
NULL, -
1, offsetof(ACEConfig, next), elm)
41
42 #define CFG_ACE_LIST_SIZE(list) \
43 cx_linked_list_size(list, offsetof(ACEConfig, next))
44
45 typedef struct _acl_conf ACLConfig;
46 typedef struct _ace_conf ACEConfig;
47
48 typedef struct _acl_file {
49 ConfigParser parser;
50 CxList *namedACLs;
51 CxList *uriACLs;
52 CxList *pathACLs;
53
54 ACLConfig *cur;
55 } ACLFile;
56
57 struct _acl_conf {
58 cxmutstr id;
59 cxmutstr type;
60 ConfigParam *authparam;
61 ACEConfig *entries;
62 };
63
64 struct _ace_conf {
65 cxmutstr who;
66 uint32_t access_mask;
67 uint16_t flags;
68 uint16_t type;
69 ACEConfig *next;
70 };
71
72
73
74
75
76
77
78
79
80 #define ACLCFG_READ_DATA 0x0001
81 #define ACLCFG_WRITE_DATA 0x0002
82 #define ACLCFG_APPEND 0x0002
83 #define ACLCFG_ADD_FILE 0x0004
84 #define ACLCFG_ADD_SUBDIRECTORY 0x0004
85 #define ACLCFG_READ_XATTR 0x0008
86 #define ACLCFG_WRITE_XATTR 0x0010
87 #define ACLCFG_EXECUTE 0x0020
88 #define ACLCFG_DELETE_CHILD 0x0040
89 #define ACLCFG_DELETE 0x0040
90 #define ACLCFG_READ_ATTRIBUTES 0x0080
91 #define ACLCFG_WRITE_ATTRIBUTES 0x0100
92 #define ACLCFG_LIST 0x0200
93 #define ACLCFG_READ_ACL 0x0400
94 #define ACLCFG_WRITE_ACL 0x0800
95 #define ACLCFG_WRITE_OWNER 0x1000
96 #define ACLCFG_SYNCHRONIZE 0x2000
97
98 #define ACLCFG_READ \
99 (
ACLCFG_READ_DATA|
ACLCFG_READ_XATTR|
ACLCFG_READ_ATTRIBUTES)
100 #define ACLCFG_WRITE \
101 (
ACLCFG_WRITE_DATA|
ACLCFG_ADD_FILE|
ACLCFG_WRITE_XATTR|
ACLCFG_WRITE_ATTRIBUTES)
102
103
104
105
106 #define ACLCFG_FILE_INHERIT 0x0001
107 #define ACLCFG_DIR_INHERIT 0x0002
108 #define ACLCFG_NO_PROPAGATE 0x0004
109 #define ACLCFG_INHERIT_ONLY 0x0008
110 #define ACLCFG_SUCCESSFUL_ACCESS_FLAG 0x0010
111 #define ACLCFG_FAILED_ACCESS_ACE_FLAG 0x0020
112 #define ACLCFG_IDENTIFIER_GROUP 0x0040
113 #define ACLCFG_OWNER 0x1000
114 #define ACLCFG_GROUP 0x2000
115 #define ACLCFG_EVERYONE 0x4000
116
117
118
119
120 #define ACLCFG_TYPE_ALLOWED 0x01
121 #define ACLCFG_TYPE_DENIED 0x02
122 #define ACLCFG_TYPE_AUDIT 0x03
123 #define ACLCFG_TYPE_ALARM 0x04
124
125
126 ACLFile* load_acl_file(
const char *file);
127
128 void free_acl_file(ACLFile *aclfile);
129
130
131 int acl_parse(
void *p, ConfigLine *begin, ConfigLine *end, cxmutstr line);
132 int parse_ace(ACLFile *f, cxmutstr line);
133
134
135
136
137 uint32_t accstr2int(cxstring access);
138
139 #ifdef __cplusplus
140 }
141 #endif
142
143 #endif
144
145