ubusd: fix issue caused by an implicit cast
[project/ubus.git] / ubusd_obj.c
index 3859c45..0831473 100644 (file)
@@ -58,6 +58,9 @@ static struct ubus_object_type *ubus_create_obj_type(struct blob_attr *sig)
        int rem;
 
        type = calloc(1, sizeof(*type));
+       if (!type)
+               return NULL;
+
        type->refcount = 1;
 
        if (!ubus_alloc_id(&obj_types, &type->id, 0))
@@ -142,6 +145,9 @@ struct ubus_object *ubusd_create_object(struct ubus_client *cl, struct blob_attr
                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;
@@ -219,10 +225,12 @@ void ubusd_free_object(struct ubus_object *obj)
        free(obj);
 }
 
-static void __init ubusd_obj_init(void)
+static void __constructor ubusd_obj_init(void)
 {
        ubus_init_id_tree(&objects);
        ubus_init_id_tree(&obj_types);
        ubus_init_string_tree(&path, false);
        ubusd_event_init();
+       ubusd_acl_init();
+       ubusd_monitor_init();
 }