int ok;
};
+const char *ubusd_acl_dir = "/usr/share/acl.d";
static struct blob_buf bbuf;
static struct avl_tree ubusd_acls;
static int ubusd_acl_seq;
return 0;
acl = avl_find_ge_element(&ubusd_acls, obj, acl, avl);
- while (acl && !avl_is_last(&ubusd_acls, &acl->avl)) {
+ avl_for_element_to_last(&ubusd_acls, acl, acl, avl) {
int diff = ubusd_acl_match_path(obj, acl->avl.key, NULL);
if (diff)
break;
- if (ubusd_acl_match_cred(cl, acl)) {
- acl = avl_next_element(acl, avl);
+ if (ubusd_acl_match_cred(cl, acl))
continue;
- }
switch (type) {
case UBUS_ACL_PUBLISH:
return 0;
break;
}
- acl = avl_next_element(acl, avl);
}
return -1;
else
return;
- if (!tb[ACL_ACCESS] && !tb[ACL_PUBLISH] && !tb[ACL_INHERIT])
- return;
-
if (tb[ACL_ACCESS])
blobmsg_for_each_attr(cur, tb[ACL_ACCESS], rem)
ubusd_acl_add_access(file, cur);
struct stat st;
glob_t gl;
int j;
+ const char *suffix = "/*.json";
+ char *path = alloca(strlen(ubusd_acl_dir) + strlen(suffix) + 1);
- if (glob("/usr/share/acl.d/*.json", GLOB_NOESCAPE | GLOB_MARK, NULL, &gl))
+ sprintf(path, "%s%s", ubusd_acl_dir, suffix);
+ if (glob(path, GLOB_NOESCAPE | GLOB_MARK, NULL, &gl))
return;
vlist_update(&ubusd_acl_files);