update get_pid_with_connection from dbus 68/215368/1
authorwansu.yoo <wansu.yoo@samsung.com>
Mon, 7 Oct 2019 11:07:01 +0000 (20:07 +0900)
committerwansu.yoo <wansu.yoo@samsung.com>
Mon, 7 Oct 2019 11:07:20 +0000 (20:07 +0900)
Change-Id: Id5d147f9ecb84d785f9df4e4d32f6546e63996bd

CMain/src/orchestration_server.c

index 42d4972..51acbcc 100644 (file)
@@ -48,6 +48,48 @@ static gchar introspection_xml[] =
     "  </node>";
 /* ---------------------------------------------------------------------------------------------------- */
 
+#define _FREEDESKTOP_BUS_NAME "org.freedesktop.DBus"
+#define _FREEDESKTOP_OBJECT_PATH "/org/freedesktop/DBus"
+#define _FREEDESKTOP_INTERFACE "org.freedesktop.DBus"
+#define _FREEDESKTOP_GETPROCESSID_METHOD "GetConnectionUnixProcessID"
+
+int get_pid_with_connection(const gchar* sender) {
+    int origin_client_pid;
+    GError *error = NULL;
+    GVariant * connection;
+
+    connection = g_variant_new ("(s)", sender);
+
+    GVariant *result =
+        g_dbus_connection_call_sync (_gdbus_conn,
+                                _FREEDESKTOP_BUS_NAME,
+                                _FREEDESKTOP_OBJECT_PATH,
+                                _FREEDESKTOP_INTERFACE,
+                                _FREEDESKTOP_GETPROCESSID_METHOD,
+                                connection,
+                                NULL,
+                                G_DBUS_CALL_FLAGS_NONE,
+                                -1,
+                                NULL,
+                                &error);
+
+    g_variant_get(result, "(u)", &origin_client_pid);
+    DEBUG("origin_client_pid: %d\n", origin_client_pid);
+
+    if (result)
+        g_variant_unref (result);
+
+    if (error) {
+        DEBUG("Failed to call remote method - %i : %s\n", error->code, error->message);
+        g_error_free (error);
+        error = NULL;
+        g_object_unref (_gdbus_conn);
+        return -1;
+    }
+
+    return origin_client_pid;
+}
+
 void set_default_dbus_interface(void)
 {
     _gdbus.get_sync = g_bus_get_sync;
@@ -60,7 +102,7 @@ void set_default_dbus_interface(void)
     _gdbus.invocation_return_value = g_dbus_method_invocation_return_value;
 }
 
-static int _request_service(GVariant *parameters)
+static int _request_service(GVariant *parameters, int origin_client_pid)
 {
     int result = ORCH_ERROR_NONE;
 
@@ -95,7 +137,10 @@ static int _request_service(GVariant *parameters)
     if (g_strcmp0(app_name, "") == 0)
         return ORCH_ERROR_INVALID_PARAMETER;
 
-    result = _request_service_cb(app_name, self_select, service_info, count, client_pid);
+    if (origin_client_pid != client_pid)
+        DEBUG("not matched clinet_pid from client and dbus, origin_client_pid(%d), client_pid(%d)\n", origin_client_pid, client_pid);
+
+    result = _request_service_cb(app_name, self_select, service_info, count, origin_client_pid);
 
     return result;
 }
@@ -111,10 +156,16 @@ static void _handle_method_call(
     gpointer user_data)
 {
     int ret = ORCH_ERROR_NONE;
+    int origin_client_pid;
+
+    origin_client_pid = get_pid_with_connection(sender);
+    if (origin_client_pid < 0) {
+        DEBUG("get_pid_with_connection error!!\n");
+    }
 
     if (g_strcmp0(method_name, "request_service") == 0)
     {
-        ret = _request_service(parameters);
+        ret = _request_service(parameters, origin_client_pid);
     }
 
     if (ret == ORCH_ERROR_NONE)