X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=libubus.h;h=5c5f8de3cf012b6879fcad37af63880ab1c25922;hp=c89182980295c81ccf19db49adeb7ed2bdd4c1e9;hb=e59b44573423ad608d0752b46a6073222db9ed45;hpb=e3815962c184b92f5e592ec6b7298898a113371f diff --git a/libubus.h b/libubus.h index c891829..5c5f8de 100644 --- a/libubus.h +++ b/libubus.h @@ -171,11 +171,19 @@ struct ubus_object_data { struct blob_attr *signature; }; +struct ubus_acl_key { + const char *user; + const char *group; + const char *object; +}; + struct ubus_request_data { uint32_t object; uint32_t peer; uint16_t seq; + struct ubus_acl_key acl; + /* internal use */ bool deferred; int fd; @@ -282,6 +290,22 @@ ubus_unregister_subscriber(struct ubus_context *ctx, struct ubus_subscriber *obj int ubus_subscribe(struct ubus_context *ctx, struct ubus_subscriber *obj, uint32_t id); int ubus_unsubscribe(struct ubus_context *ctx, struct ubus_subscriber *obj, uint32_t id); + +/* ----------- acl ----------- */ + +struct acl_object { + struct ubus_acl_key key; + struct avl_node avl; + struct blob_attr *acl; +}; + +extern struct avl_tree acl_objects; +int ubus_register_acl(struct ubus_context *ctx); + +#define acl_for_each(o, m) \ + if ((m)->object && (m)->user && (m)->group) \ + avl_for_element_range(avl_find_ge_element(&acl_objects, m, o, avl), avl_find_le_element(&acl_objects, m, o, avl), o, avl) + /* ----------- rpc ----------- */ /* invoke a method on a specific object */