Fix the dbus permission problem in mesh
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / bluez_hal / src / bt-hal-mesh-dbus-handler.c
index 99163ad..ab136a7 100644 (file)
@@ -36,6 +36,8 @@
 
 #include <hardware/bt_mesh.h>
 
+#define BT_HAL_MESH_DBUS_NAME "org.projectx.bt.mesh"
+
 #define BT_HAL_UUID_LEN 16
 #define BT_HAL_BLUEZ_MESH_NAME "org.bluez.mesh"
 
@@ -516,11 +518,23 @@ static void __mesh_dbus_client_ready(struct l_dbus_client *client_obj,
        client = client_obj;
 }
 
+static void __mesh_acquire_name_callback(struct l_dbus *dbus_obj, bool success,
+                                       bool queued, void *user_data)
+{
+       if (success == false)
+               ERR("Mesh: Fail to acquire dbus name\n");
+
+       if (!l_dbus_object_manager_enable(dbus_obj, "/"))
+               ERR("Mesh: Failed to register the ObjectManager\n");
+}
+
 static void __mesh_ready_callback(void *user_data)
 {
        INFO("Mesh: Connected to D-Bus\n");
-       if (!l_dbus_object_manager_enable(dbus, "/"))
-               ERR("Mesh: Failed to register the ObjectManager\n");
+
+       if (!l_dbus_name_acquire(dbus, BT_HAL_MESH_DBUS_NAME, false, false, false,
+                               __mesh_acquire_name_callback, NULL))
+               ERR("Mesh: Failed to own well-known name\n");
 }
 
 bool _bt_hal_mesh_stack_init(void)
@@ -2289,6 +2303,8 @@ bt_status_t _bt_hal_mesh_send_key_config_message(
                }
                l1 = g_slist_find_custom(app->elements,
                        GUINT_TO_POINTER(src_elem_idx), __compare_element_index);
+               if (!l1)
+                       return BT_STATUS_FAIL;
                elem = l1->data;
 
                req = l_new(struct key_config_request, 1);