315 uid_t uid, |
315 uid_t uid, |
316 gid_t gid, |
316 gid_t gid, |
317 uid_t owner, |
317 uid_t owner, |
318 gid_t owninggroup); |
318 gid_t owninggroup); |
319 |
319 |
320 int fs_acl_check(SysACL *acl, User *user, char *path, uint32_t access_mask) { |
320 int fs_acl_check(SysACL *acl, User *user, const char *path, uint32_t access_mask) { |
321 sstr_t p; |
321 sstr_t p; |
322 if(path[0] != '/') { |
322 if(path[0] != '/') { |
323 size_t n = 128; |
323 size_t n = 128; |
324 char *cwd = malloc(n); |
324 char *cwd = malloc(n); |
325 while(!getcwd(cwd, n)) { |
325 while(!getcwd(cwd, n)) { |
330 free(cwd); |
330 free(cwd); |
331 return 0; |
331 return 0; |
332 } |
332 } |
333 } |
333 } |
334 sstr_t wd = sstr(cwd); |
334 sstr_t wd = sstr(cwd); |
335 sstr_t pp = sstr(path); |
335 sstr_t pp = sstr((char*)path); |
336 |
336 |
337 p = sstrcat(3, wd, sstrn("/", 1), pp); |
337 p = sstrcat(3, wd, sstrn("/", 1), pp); |
338 } else { |
338 } else { |
339 p = sstrdup(sstr(path)); |
339 p = sstrdup(sstr((char*)path)); |
340 } |
340 } |
341 if(p.ptr[p.length-1] == '/') { |
341 if(p.ptr[p.length-1] == '/') { |
342 p.ptr[p.length-1] = 0; |
342 p.ptr[p.length-1] = 0; |
343 p.length--; |
343 p.length--; |
344 } |
344 } |