int get_acl(struct asfd *asfd, struct sbuf *sb, char **acltext, size_t *alen, struct cntr *cntr) { acl_t acl=NULL; const char *path=sb->path.buf; if((acl=acl_contains_something(path, ACL_TYPE_ACCESS))) { if(get_acl_string(asfd, acl, acltext, alen, path, META_ACCESS_ACL, cntr)) { acl_free(acl); return -1; } acl_free(acl); } if(S_ISDIR(sb->statp.st_mode)) { if((acl=acl_contains_something(path, ACL_TYPE_DEFAULT))) { if(get_acl_string(asfd, acl, acltext, alen, path, META_DEFAULT_ACL, cntr)) { acl_free(acl); return -1; } acl_free(acl); } } return 0; }
int get_acl(struct asfd *asfd, const char *path, int isdir, char **acltext, size_t *alen, struct cntr *cntr) { int ret=-1; acl_t acl=NULL; if((acl=acl_contains_something(path, ACL_TYPE_ACCESS))) { if(get_acl_string(asfd, acl, acltext, alen, path, META_ACCESS_ACL, cntr)) goto end; } if(isdir) { if(acl) acl_free(acl); if((acl=acl_contains_something(path, ACL_TYPE_DEFAULT))) { if(get_acl_string(asfd, acl, acltext, alen, path, META_DEFAULT_ACL, cntr)) goto end; } } ret=0; end: if(acl) acl_free(acl); return ret; }
int has_acl(const char *path, enum cmd cmd) { acl_t acl=NULL; if(!(acl=acl_contains_something(path, ACL_TYPE_ACCESS)) || (cmd==CMD_DIRECTORY && !(acl=acl_contains_something(path, ACL_TYPE_DEFAULT)))) return 0; acl_free(acl); return 1; }