#include #include #include #include #include int main(int argc, char *argv[]) { int ret, get; acl_t acl; acl_entry_t entry = NULL; acl_entry_t e; acl_permset_t permset; char *filename = argv[1]; acl = acl_get_file(filename, ACL_TYPE_ACCESS); if (!acl) { printf("no acl found"); exit(1); } get = acl_get_entry(acl, ACL_FIRST_ENTRY, &e); while (get == 1) { acl_tag_t t; acl_get_tag_type(e, &t); if (t == ACL_USER) { uid_t *u; u = (uid_t *)acl_get_qualifier(e); printf("got user acl for %d\n", u ? *u : -1); } else { printf("got non-user acl type %d\n", t); } get = acl_get_entry(acl, ACL_NEXT_ENTRY, &e); } acl_get_permset(entry, &permset); acl_add_perm(permset, ACL_READ|ACL_WRITE); acl_calc_mask(&acl); ret = acl_set_file(filename, ACL_TYPE_ACCESS, acl); printf("acl_set_file returned %d\n", ret); acl_free(acl); }