X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=ubusd_acl.c;h=4b72663d25aa983cb65b10fae8ba029b099c7c45;hp=9c2775063db7ea048d77ffa82f8ecfa6145336af;hb=6f4e11e1db399074273944329883f9c35e7daef6;hpb=766d49876f8f877f4846c16864e7f73b5a3917f7;ds=sidebyside diff --git a/ubusd_acl.c b/ubusd_acl.c index 9c27750..4b72663 100644 --- a/ubusd_acl.c +++ b/ubusd_acl.c @@ -101,10 +101,13 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj, struct blob_attr *cur; int rem; - if (!cl->gid && !cl->uid) + if (!cl->uid || !obj) return 0; acl = avl_find_ge_element(&ubusd_acls, obj, acl, avl); + if (!acl) + return -1; + avl_for_element_to_last(&ubusd_acls, acl, acl, avl) { int diff = ubusd_acl_match_path(obj, acl->avl.key, NULL); @@ -171,6 +174,13 @@ ubusd_acl_init_client(struct ubus_client *cl, int fd) return 0; } +void +ubusd_acl_free_client(struct ubus_client *cl) +{ + free(cl->group); + free(cl->user); +} + static void ubusd_acl_file_free(struct ubusd_acl_file *file) { @@ -415,13 +425,16 @@ ubusd_reply_add(struct ubus_object *obj) return; acl = avl_find_ge_element(&ubusd_acls, obj->path.key, acl, avl); + if (!acl) + return; + avl_for_element_to_last(&ubusd_acls, acl, acl, avl) { void *c; if (!acl->priv) continue; - if (!ubusd_acl_match_path(obj->path.key, acl->avl.key, NULL)) + if (ubusd_acl_match_path(obj->path.key, acl->avl.key, NULL)) continue; c = blobmsg_open_table(&b, NULL);