Fixed the problem where enabler method fails
authorsaerome.kim <saerome.kim@samsung.com>
Fri, 8 Nov 2019 08:52:10 +0000 (17:52 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 8 Nov 2019 10:55:32 +0000 (19:55 +0900)
- Problem: The net.uamd.enabler method call fails.
- Cause: Invoke the 'enable' method to an object is not registered in
  dbus system.
- Solution: Remove 'enabler' interface and combine 'enabler' to
  '/net/uamd' interface

Change-Id: Ia40394ceb7d83a4305b0c0ab953ea6ffc423f9df
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
packaging/net.uamd.service
packaging/ua-manager.conf
packaging/ua-manager.service
packaging/ua-manager.spec
ua-api/src/ua-request-sender.c
ua-daemon/src/ua-manager-request-handler.c

index 1a8fccf..c5614db 100644 (file)
@@ -1,4 +1,4 @@
 [D-BUS Service]
-Name=net.uamd.enabler
+Name=net.uamd
 Exec=/bin/false
 SystemdService=ua-manager.service
index cb01262..d98d82b 100644 (file)
@@ -4,20 +4,19 @@
 <busconfig>
     <policy user="root">
         <allow own="net.uamd"/>
-        <allow own="net.uamd.enabler"/>
         <allow send_destination="net.uamd"/>
-        <allow send_destination="net.uamd.enabler"/>
     </policy>
     <policy user="network_fw">
         <allow own="net.uamd"/>
-        <allow own="net.uamd.enabler"/>
         <allow send_destination="net.uamd"/>
-        <allow send_destination="net.uamd.enabler"/>
+    </policy>
+    <policy group="users">
+        <allow send_destination="net.uamd" send_path="/net/uamd" send_member="uam_request"/>
     </policy>
     <policy context="default">
         <deny own="net.uamd"/>
-        <deny own="net.uamd.enabler"/>
         <deny send_destination="net.uamd"/>
-        <deny send_destination="net.uamd.enabler"/>
+        <allow send_destination="net.uamd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" />
     </policy>
 </busconfig>
+
index 8276134..02eef98 100644 (file)
@@ -5,7 +5,7 @@ Description=User Awareness Frwk Manager
 Type=dbus
 User=network_fw
 Group=network_fw
-BusName=net.uamd.enabler
+BusName=net.uamd
 SmackProcessLabel=System
 ExecStart=/usr/bin/ua-manager
 Capabilities=cap_net_raw,cap_sys_rawio=i
index d08bf11..dab58cb 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.12.12
+Version:    0.12.14
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index d46b5a2..102b5d2 100644 (file)
@@ -132,9 +132,9 @@ int _uam_sync_enable(int enable)
        retv_if(NULL == conn, UAM_ERROR_INTERNAL);
 
        variant = g_dbus_connection_call_sync(conn,
-                       UAM_DBUS_NAME".enabler",
-                       UAM_DAEMON_PATH"/enabler",
-                       UAM_DBUS_NAME".enabler",
+                       UAM_DBUS_NAME,
+                       UAM_DAEMON_PATH,
+                       UAM_DBUS_NAME,
                        "enable",
                        g_variant_new("(i)", enable), NULL,
                        G_DBUS_CALL_FLAGS_NONE,
index 643e7a6..c485a1e 100644 (file)
 
 extern GMainLoop *main_loop;
 
-/* global list to care resource handle for each client */
-static GSList *uam_dbus_clients;
-static GMutex uam_dbus_clients_mutex;
-
-typedef struct _uam_dbus_client_s {
-       gchar *bus_name;
-} uam_dbus_client_s;
-
 /* For maintaining Application Sync API call requests */
 static GSList *request_list = NULL;
 
 static GDBusConnection *uam_manager_conn;
 static guint g_dbus_object_id = 0;
 static guint owner_id = 0;
-static guint g_dbus_enabler_object_id = 0;
-static guint enabler_dbus_id = 0;
-static guint owner_sig_id = 0;
 
-static const gchar uam_enabler_introspection_xml[] =
+static const gchar uam_manager_introspection_xml[] =
 "<node name='/net/uamd'>"
-"      <interface name='net.uamd.enabler'>"
+"      <interface name='net.uamd'>"
 "              <method name='enable'>"
 "              <arg type='i' name='enable' direction='in' />"
 "              <arg type='i' name='result' direction='out' />"
 "              </method>"
-"      </interface>"
-"</node>";
-
-
-static const gchar uam_manager_introspection_xml[] =
-"<node name='/net/uamd'>"
-"      <interface name='net.uamd'>"
 "              <method name='uam_request'>"
 "                      <arg type='i' name='request_function' direction='in' />"
 "                      <arg type='ay' name='input_param1' direction='in' />"
@@ -862,11 +844,20 @@ static void __uam_manager_method(
                gpointer user_data)
 {
        FUNC_ENTRY;
+       int result = UAM_ERROR_NONE;
 
        UAM_DBG("Method[%s] Path[%s] Interface[%s]",
                        method_name, object_path, interface_name);
 
-       if (0 == g_strcmp0(method_name, "uam_request")) {
+       if (0 == g_strcmp0(method_name, "enable")) {
+               int enable = FALSE;
+
+               g_variant_get(parameters, "(i)", &enable);
+               UAM_INFO("Enable ua-manager %s", enable == TRUE ? "enabled" : "disabled");
+               g_dbus_method_invocation_return_value(invocation,
+                       g_variant_new("(i)", result));
+
+       } else if (0 == g_strcmp0(method_name, "uam_request")) {
                int function;
 
                GVariant *in_param1 = NULL;
@@ -874,7 +865,6 @@ static void __uam_manager_method(
                GVariant *in_param3 = NULL;
                GVariant *in_param4 = NULL;
                GArray *out_param1 = NULL;
-               int result = 0;
 
                g_variant_get(parameters, "(i@ay@ay@ay@ay)", &function,
                                &in_param1, &in_param2, &in_param3, &in_param4);
@@ -916,106 +906,6 @@ done:
        return;
 }
 
-static const GDBusInterfaceVTable uam_method_table = {
-       __uam_manager_method,
-       NULL,
-       NULL,
-       {0}
-};
-
-static int __uam_comp_bus_name(const void *a, const void *b)
-{
-       const uam_dbus_client_s *client = a;
-
-       retv_if(NULL == a || NULL == b, -1);
-
-       return g_strcmp0(client->bus_name, b);
-}
-
-static inline GSList* __uam_list_find_client(const gchar *owner)
-{
-       return g_slist_find_custom(uam_dbus_clients, owner,
-                       __uam_comp_bus_name);
-}
-
-static void __uamd_dbus_client_cleanup(gpointer data)
-{
-       uam_dbus_client_s *client = data;
-
-       ret_if(NULL == data);
-
-       g_free(client->bus_name);
-       client->bus_name = NULL;
-       g_free(client);
-       client = NULL;
-}
-
-static void __uam_enabler_method(
-               GDBusConnection *connection,
-               const gchar *sender,
-               const gchar *object_path,
-               const gchar *interface_name,
-               const gchar *method_name,
-               GVariant *parameters,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
-{
-       FUNC_ENTRY;
-       int enable = FALSE;
-       int result = UAM_ERROR_NONE;
-       GSList *list = NULL;
-
-       UAM_DBG("Sender[%s] Method[%s] Path[%s] Interface[%s]",
-                       sender, method_name, object_path, interface_name);
-
-       if (0 == g_strcmp0(method_name, "enable")) {
-               g_variant_get(parameters, "(i)", &enable);
-               if (TRUE == enable) {
-
-                       UAM_DBG("Enable ua-manager");
-
-                       list = __uam_list_find_client(sender);
-                       if (NULL == list) {
-                               uam_dbus_client_s *client = g_malloc(sizeof(uam_dbus_client_s));
-                               if (NULL == client) {
-                                       UAM_ERR("Faild to allocate memory");
-                                       /* To-Do clearn up */
-                                       return;
-                               }
-
-                               client->bus_name = g_strdup(sender);
-
-                               g_mutex_lock(&uam_dbus_clients_mutex);
-                               uam_dbus_clients = g_slist_prepend(uam_dbus_clients, client);
-                               g_mutex_unlock(&uam_dbus_clients_mutex);
-                       }
-               } else {
-                       UAM_DBG("Disable ua-manager");
-
-                       g_mutex_lock(&uam_dbus_clients_mutex);
-                       list = __uam_list_find_client(sender);
-                       if (list) {
-                               /* found bus name in our bus list */
-                               __uamd_dbus_client_cleanup((gpointer)list->data);
-                               uam_dbus_clients = g_slist_remove_link(uam_dbus_clients, list);
-                       }
-                       g_mutex_unlock(&uam_dbus_clients_mutex);
-               }
-               g_dbus_method_invocation_return_value(invocation,
-                               g_variant_new("(i)", result));
-       }
-       FUNC_EXIT;
-       return;
-}
-
-
-static const GDBusInterfaceVTable uam_enaber_method_table = {
-       __uam_enabler_method,
-       NULL,
-       NULL,
-       {0}
-};
-
 static GDBusNodeInfo *__uam_manager_create_method_node_info(
                const gchar *introspection_data)
 {
@@ -1038,24 +928,12 @@ static GDBusNodeInfo *__uam_manager_create_method_node_info(
        return node_info;
 }
 
-static int __uam_enabler_register_object(
-               GDBusConnection *conn, GDBusNodeInfo *node_info)
-{
-       FUNC_ENTRY;
-       GError *error = NULL;
-
-       retv_if(NULL == node_info, UAM_ERROR_INTERNAL);
-
-       g_dbus_enabler_object_id = g_dbus_connection_register_object(conn,
-                       UAM_DAEMON_PATH"/enabler",
-                       node_info->interfaces[0],
-                       &uam_enaber_method_table,
-                       NULL, NULL, &error);
-       retv_if(0 == g_dbus_enabler_object_id, UAM_ERROR_INTERNAL);
-
-       FUNC_EXIT;
-       return UAM_ERROR_NONE;
-}
+static const GDBusInterfaceVTable uam_method_table = {
+       __uam_manager_method,
+       NULL,
+       NULL,
+       {0}
+};
 
 static int __uam_manager_register_object(
                GDBusConnection *conn, GDBusNodeInfo *node_info)
@@ -1086,58 +964,10 @@ static int __uam_manager_unregister_object(GDBusConnection *conn)
                g_dbus_object_id = 0;
        }
 
-       if (g_dbus_enabler_object_id > 0) {
-               g_dbus_connection_unregister_object(
-                               conn, g_dbus_enabler_object_id);
-               g_dbus_enabler_object_id = 0;
-       }
-
        FUNC_EXIT;
        return UAM_ERROR_NONE;
 }
 
-static void __uam_manager_cleanup_requests_from_sender(const char *name)
-{
-       GSList *l;
-
-       ret_if(NULL == name);
-
-       for (l = request_list; l != NULL;) {
-               uam_request_context_t *info = l->data;
-               l = g_slist_next(l);
-               if (NULL == info || NULL == info->sender)
-                       continue;
-
-               if ((strcasecmp(info->sender, name) == 0)) {
-                       request_list = g_slist_remove(request_list, info);
-                       g_free(info->sender);
-                       g_free(info);
-               }
-       }
-
-       /* App terminated, cleanup monitor list */
-       _uam_core_cleanup_monitor((char *)name);
-}
-
-static void __uam_manager_name_owner_changed_cb(GDBusConnection *connection,
-               const gchar *sender_name,
-               const gchar *object_path,
-               const gchar *interface_name,
-               const gchar *signal_name,
-               GVariant *parameters,
-               gpointer user_data)
-{
-       const char *name = NULL;
-       const char *old_owner = NULL;
-       const char *new_owner = NULL;
-
-       g_variant_get(parameters, "(&s&s&s)", &name, &old_owner, &new_owner);
-       if ('\0' == *new_owner) {
-               /* Clean up client info */
-               _uam_manager_cleanup_client(name);
-       }
-}
-
 static void __uam_manager_name_acquired_cb(
                GDBusConnection *connection, const gchar *name, gpointer user_data)
 {
@@ -1177,35 +1007,11 @@ static void __uam_manager_bus_acquired_cb(
        __uam_manager_register_object(connection, node_info);
        g_dbus_node_info_unref(node_info);
 
-       /* Subscribe for name owner changed signal */
-       owner_sig_id = g_dbus_connection_signal_subscribe(connection,
-                       UAM_SERVICE_DBUS, UAM_INTERFACE_DBUS,
-                       NAME_OWNER_CHANGED, NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE,
-                       __uam_manager_name_owner_changed_cb, NULL, NULL);
-
-       UAM_DBG("owner_sig_id: [%d]", owner_sig_id);
        uam_manager_conn = connection;
 
        FUNC_EXIT;
 }
 
-static void __uam_enabler_bus_acquired(
-               GDBusConnection *connection, const gchar *name, gpointer user_data)
-{
-       GDBusNodeInfo *node_info = NULL;
-
-       UAM_INFO("DBus bus acquired");
-
-       ret_if(connection == NULL);
-
-       node_info = __uam_manager_create_method_node_info(
-                       uam_enabler_introspection_xml);
-       ret_if(node_info == NULL);
-
-       __uam_enabler_register_object(connection, node_info);
-       g_dbus_node_info_unref(node_info);
-}
-
 int _uam_manager_register(void)
 {
        FUNC_ENTRY;
@@ -1221,17 +1027,6 @@ int _uam_manager_register(void)
 
        UAM_DBG("owner_id is [%d]", owner_id);
 
-       /* Get D-Bus owner to activate mesh service daemon */
-       enabler_dbus_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
-                       UAM_DBUS_NAME".enabler",
-                       G_BUS_NAME_OWNER_FLAGS_REPLACE,
-                       __uam_enabler_bus_acquired,
-                       NULL,
-                       NULL,
-                       NULL, NULL);
-
-       retv_if(0 == enabler_dbus_id, UAM_ERROR_INTERNAL);
-
        FUNC_EXIT;
        return UAM_ERROR_NONE;
 }
@@ -1241,28 +1036,17 @@ void _uam_manager_unregister(void)
        FUNC_ENTRY;
 
        if (uam_manager_conn) {
-               if (owner_sig_id > 0) {
-                       g_dbus_connection_signal_unsubscribe(
-                                       uam_manager_conn, owner_sig_id);
-                       owner_sig_id = 0;
-               }
 
                __uam_manager_unregister_object(uam_manager_conn);
 
-               if (uam_manager_conn) {
-                       g_object_unref(uam_manager_conn);
-                       uam_manager_conn = NULL;
-               }
+               g_object_unref(uam_manager_conn);
+               uam_manager_conn = NULL;
 
                if (owner_id > 0) {
                        g_bus_unown_name(owner_id);
                        owner_id = 0;
                }
 
-               if (enabler_dbus_id > 0) {
-                       g_bus_unown_name(enabler_dbus_id);
-                       enabler_dbus_id = 0;
-               }
        }
 
        FUNC_EXIT;
@@ -1297,26 +1081,3 @@ void _uam_manager_remove_req_ctxt_from_list(uam_request_context_t *req_info)
        FUNC_EXIT;
 }
 
-void _uam_manager_cleanup_client(const char *name)
-{
-       int count = 1;
-       GSList *list = NULL;
-
-       /* Cleanup all pending request from this sender */
-       __uam_manager_cleanup_requests_from_sender(name);
-
-       g_mutex_lock(&uam_dbus_clients_mutex);
-       list = __uam_list_find_client(name);
-       if (list) {
-               /* found bus name in our bus list */
-               __uamd_dbus_client_cleanup((gpointer)list->data);
-               uam_dbus_clients = g_slist_remove_link(uam_dbus_clients, list);
-               count = g_slist_length(uam_dbus_clients);
-       }
-       g_mutex_unlock(&uam_dbus_clients_mutex);
-
-       if (0 == count) {
-               UAM_ERR("Quit ua-manager");
-               g_main_loop_quit(main_loop);
-       }
-}