src/server/config/acl.c

changeset 52
aced2245fb1c
parent 51
b28cf69f42e8
child 56
c6cf20b09043
equal deleted inserted replaced
51:b28cf69f42e8 52:aced2245fb1c
160 160
161 size_t maskn = 0; 161 size_t maskn = 0;
162 sstr_t *accessmask = sstrsplit(s, sstr(","), &maskn); 162 sstr_t *accessmask = sstrsplit(s, sstr(","), &maskn);
163 for(int i=0;i<maskn;i++) { 163 for(int i=0;i<maskn;i++) {
164 sstr_t access = accessmask[i]; 164 sstr_t access = accessmask[i];
165 if(!sstrcmp(access, sstr("read"))) { 165 ace->access_mask = ace->access_mask | accstr2int(access);
166 ace->access_mask = ace->access_mask | ACLCFG_READ;
167 } else if(!sstrcmp(access, sstr("write"))) {
168 ace->access_mask = ace->access_mask | ACLCFG_WRITE;
169 } else if(!sstrcmp(access, sstr("read_data"))) {
170 ace->access_mask = ace->access_mask | ACLCFG_READ_DATA;
171 } else if(!sstrcmp(access, sstr("write_data"))) {
172 ace->access_mask = ace->access_mask | ACLCFG_WRITE_DATA;
173 } else if(!sstrcmp(access, sstr("append"))) {
174 ace->access_mask = ace->access_mask | ACLCFG_APPEND;
175 } else if(!sstrcmp(access, sstr("add_file"))) {
176 ace->access_mask = ace->access_mask | ACLCFG_ADD_FILE;
177 } else if(!sstrcmp(access, sstr("add_subdirectory"))) {
178 ace->access_mask = ace->access_mask | ACLCFG_ADD_SUBDIRECTORY;
179 } else if(!sstrcmp(access, sstr("read_xattr"))) {
180 ace->access_mask = ace->access_mask | ACLCFG_READ_XATTR;
181 } else if(!sstrcmp(access, sstr("write_xattr"))) {
182 ace->access_mask = ace->access_mask | ACLCFG_WRITE_XATTR;
183 } else if(!sstrcmp(access, sstr("execute"))) {
184 ace->access_mask = ace->access_mask | ACLCFG_EXECUTE;
185 } else if(!sstrcmp(access, sstr("delete_child"))) {
186 ace->access_mask = ace->access_mask | ACLCFG_DELETE_CHILD;
187 } else if(!sstrcmp(access, sstr("delete"))) {
188 ace->access_mask = ace->access_mask | ACLCFG_DELETE;
189 } else if(!sstrcmp(access, sstr("read_attributes"))) {
190 ace->access_mask = ace->access_mask | ACLCFG_READ_ATTRIBUTES;
191 } else if(!sstrcmp(access, sstr("write_attributes"))) {
192 ace->access_mask = ace->access_mask | ACLCFG_WRITE_ATTRIBUTES;
193 } else if(!sstrcmp(access, sstr("list"))) {
194 ace->access_mask = ace->access_mask | ACLCFG_LIST;
195 } else if(!sstrcmp(access, sstr("read_acl"))) {
196 ace->access_mask = ace->access_mask | ACLCFG_READ_ACL;
197 } else if(!sstrcmp(access, sstr("write_acl"))) {
198 ace->access_mask = ace->access_mask | ACLCFG_WRITE_ACL;
199 } else if(!sstrcmp(access, sstr("write_owner"))) {
200 ace->access_mask = ace->access_mask | ACLCFG_WRITE_OWNER;
201 } else if(!sstrcmp(access, sstr("synchronize"))) {
202 ace->access_mask = ace->access_mask | ACLCFG_SYNCHRONIZE;
203 }
204 } 166 }
205 free(accessmask); 167 free(accessmask);
206 n++; // next token 168 n++; // next token
207 169
208 /* 170 /*
253 215
254 cur->entries = ucx_list_append(cur->entries, ace); 216 cur->entries = ucx_list_append(cur->entries, ace);
255 217
256 return 0; 218 return 0;
257 } 219 }
220
221 uint32_t accstr2int(sstr_t access) {
222 uint32_t val = 0;
223 if(!sstrcmp(access, sstr("read"))) {
224 val = ACLCFG_READ;
225 } else if(!sstrcmp(access, sstr("write"))) {
226 val = ACLCFG_WRITE;
227 } else if(!sstrcmp(access, sstr("read_data"))) {
228 val = ACLCFG_READ_DATA;
229 } else if(!sstrcmp(access, sstr("write_data"))) {
230 val = ACLCFG_WRITE_DATA;
231 } else if(!sstrcmp(access, sstr("append"))) {
232 val = ACLCFG_APPEND;
233 } else if(!sstrcmp(access, sstr("add_file"))) {
234 val = ACLCFG_ADD_FILE;
235 } else if(!sstrcmp(access, sstr("add_subdirectory"))) {
236 val = ACLCFG_ADD_SUBDIRECTORY;
237 } else if(!sstrcmp(access, sstr("read_xattr"))) {
238 val = ACLCFG_READ_XATTR;
239 } else if(!sstrcmp(access, sstr("write_xattr"))) {
240 val = ACLCFG_WRITE_XATTR;
241 } else if(!sstrcmp(access, sstr("execute"))) {
242 val = ACLCFG_EXECUTE;
243 } else if(!sstrcmp(access, sstr("delete_child"))) {
244 val = ACLCFG_DELETE_CHILD;
245 } else if(!sstrcmp(access, sstr("delete"))) {
246 val = ACLCFG_DELETE;
247 } else if(!sstrcmp(access, sstr("read_attributes"))) {
248 val = ACLCFG_READ_ATTRIBUTES;
249 } else if(!sstrcmp(access, sstr("write_attributes"))) {
250 val = ACLCFG_WRITE_ATTRIBUTES;
251 } else if(!sstrcmp(access, sstr("list"))) {
252 val = ACLCFG_LIST;
253 } else if(!sstrcmp(access, sstr("read_acl"))) {
254 val = ACLCFG_READ_ACL;
255 } else if(!sstrcmp(access, sstr("write_acl"))) {
256 val = ACLCFG_WRITE_ACL;
257 } else if(!sstrcmp(access, sstr("write_owner"))) {
258 val = ACLCFG_WRITE_OWNER;
259 } else if(!sstrcmp(access, sstr("synchronize"))) {
260 val = ACLCFG_SYNCHRONIZE;
261 }
262 return val;
263 }

mercurial