projects
/
project
/
ubus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
CMakeLists.txt: bump minimum cmake version
[project/ubus.git]
/
ubusd_obj.c
diff --git
a/ubusd_obj.c
b/ubusd_obj.c
index 8923821e0827fe3fb904ae57e212ed7cc33f0016..dd44882e08d57e44ea983a1fdbbed58897204757 100644
(file)
--- a/
ubusd_obj.c
+++ b/
ubusd_obj.c
@@
-20,13
+20,12
@@
struct avl_tree path;
static void ubus_unref_object_type(struct ubus_object_type *type)
{
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;
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);
}
list_del(&m->list);
free(m);
}
@@
-55,9
+54,12
@@
static struct ubus_object_type *ubus_create_obj_type(struct blob_attr *sig)
{
struct ubus_object_type *type;
struct blob_attr *pos;
{
struct ubus_object_type *type;
struct blob_attr *pos;
-
in
t rem;
+
size_
t rem;
type = calloc(1, sizeof(*type));
type = calloc(1, sizeof(*type));
+ if (!type)
+ return NULL;
+
type->refcount = 1;
if (!ubus_alloc_id(&obj_types, &type->id, 0))
type->refcount = 1;
if (!ubus_alloc_id(&obj_types, &type->id, 0))
@@
-142,6
+144,9
@@
struct ubus_object *ubusd_create_object(struct ubus_client *cl, struct blob_attr
return NULL;
if (attr[UBUS_ATTR_OBJPATH]) {
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;
obj->path.key = strdup(blob_data(attr[UBUS_ATTR_OBJPATH]));
if (!obj->path.key)
goto free;
@@
-225,4
+230,6
@@
static void __constructor ubusd_obj_init(void)
ubus_init_id_tree(&obj_types);
ubus_init_string_tree(&path, false);
ubusd_event_init();
ubus_init_id_tree(&obj_types);
ubus_init_string_tree(&path, false);
ubusd_event_init();
+ ubusd_acl_init();
+ ubusd_monitor_init();
}
}