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 } |