kdbus: libdbuspolicy: To perform policy check, pass unique name to libdbuspolicy 58/139058/2 accepted/tizen/4.0/unified/20170816.011022 accepted/tizen/4.0/unified/20170828.222527 accepted/tizen/unified/20170727.190338 submit/tizen/20170719.103604 submit/tizen/20170725.023005 submit/tizen_4.0/20170811.094300 submit/tizen_4.0/20170828.100005
authorsanghyeok.oh <sanghyeok.oh@samsung.com>
Mon, 17 Jul 2017 06:00:49 +0000 (15:00 +0900)
committersanghyeok.oh <sanghyeok.oh@samsung.com>
Tue, 18 Jul 2017 08:46:00 +0000 (17:46 +0900)
In case of signal broadcasting, message has null destination,
To perform policy check correctly, gdbus should pass unique name to libdbuspolicy as destination.

Change-Id: I563f7ad5ab99a9c91b5180350bb32259d3fed2b6
Signed-off-by: sanghyeok.oh <sanghyeok.oh@samsung.com>
gio/gkdbus.c

index 4387b90..63351d3 100755 (executable)
@@ -2980,15 +2980,19 @@ again:
 #ifdef LIBDBUSPOLICY
     if (worker->dbuspolicy != NULL)
       {
-        if (g_dbus_message_get_message_type (kmsg->message) == G_DBUS_MESSAGE_TYPE_METHOD_CALL)
+        if (g_dbus_message_get_message_type (kmsg->message) == G_DBUS_MESSAGE_TYPE_METHOD_CALL ||
+            g_dbus_message_get_message_type (kmsg->message) == G_DBUS_MESSAGE_TYPE_SIGNAL)
           {
             if ((kmsg->sender_euid != (uid_t) -1) && (kmsg->sender_egid != (gid_t) -1) &&
                 (kmsg->sender_seclabel != NULL))
               {
                 gint check;
+                gchar *destination = g_dbus_message_get_destination (kmsg->message);
+                if (!destination)
+                  destination = worker->unique_name;
 
                 check = dbuspolicy1_check_in (worker->dbuspolicy,
-                                              g_dbus_message_get_destination (kmsg->message),
+                                              destination,
                                               kmsg->sender_names,
                                               kmsg->sender_seclabel,
                                               kmsg->sender_euid,
@@ -3505,7 +3509,9 @@ _g_kdbus_send (GKDBusWorker  *worker,
 #ifdef LIBDBUSPOLICY
   if (worker->dbuspolicy != NULL)
     {
-      if (g_dbus_message_get_message_type (message) == G_DBUS_MESSAGE_TYPE_METHOD_CALL)
+      if (g_dbus_message_get_message_type (message) == G_DBUS_MESSAGE_TYPE_METHOD_CALL ||
+         (g_dbus_message_get_message_type (message) == G_DBUS_MESSAGE_TYPE_SIGNAL &&
+           g_dbus_message_get_destination (message) != NULL))
         {
           gint check;