static void ubus_unref_object_type(struct ubus_object_type *type)
{
- struct ubus_method *m;
+ struct ubus_method *m, *tmp;
if (--type->refcount > 0)
return;
- while (!list_empty(&type->methods)) {
- m = list_first_entry(&type->methods, struct ubus_method, list);
+ list_for_each_entry_safe(m, tmp, &type->methods, list) {
list_del(&m->list);
free(m);
}
{
struct ubus_object_type *type;
struct blob_attr *pos;
- int rem;
+ size_t rem;
type = calloc(1, sizeof(*type));
if (!type)
return NULL;
if (attr[UBUS_ATTR_OBJPATH]) {
+ if (ubusd_acl_check(cl, blob_data(attr[UBUS_ATTR_OBJPATH]), NULL, UBUS_ACL_PUBLISH))
+ goto free;
+
obj->path.key = strdup(blob_data(attr[UBUS_ATTR_OBJPATH]));
if (!obj->path.key)
goto free;
ubus_init_id_tree(&obj_types);
ubus_init_string_tree(&path, false);
ubusd_event_init();
+ ubusd_acl_init();
+ ubusd_monitor_init();
}