Fix to uniquely identify caller daemon 53/274053/1
authorAbhay Agarwal <ay.agarwal@samsung.com>
Wed, 20 Apr 2022 10:57:11 +0000 (16:27 +0530)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Wed, 20 Apr 2022 10:58:14 +0000 (16:28 +0530)
Change-Id: If1760a6f2bef5a8d1c1690d3569a4878c1091e5e
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-request-handler.c

index a3618c3..48d2c41 100755 (executable)
@@ -2400,9 +2400,9 @@ int _uam_core_service_add_user(const char *svc_name, const char *account, const
                svc_user->app_num = app_num;
 
                svc_users = g_slist_prepend(svc_users, svc_user);
-       }
-       else
+       } else {
                UAM_INFO("USER SERVICE MAPPING ALLREADY PRESENT.");
+       }
 
        FUNC_EXIT;
        return ret;
index d7a0dad..4a9a12b 100755 (executable)
@@ -15,6 +15,7 @@
  *
  */
 
+#include <stdio.h>
 #include "ua-internal.h"
 #include "ua-manager-common.h"
 #include "ua-manager-core.h"
@@ -23,6 +24,8 @@
 #include <cynara-creds-gdbus.h>
 #include <aul.h>
 
+#define MAX_BUFFER_SIZE 256
+
 extern GMainLoop *main_loop;
 
 /* For maintaining Application Sync API call requests */
@@ -272,6 +275,25 @@ static int __uam_get_sender_pid(const char *unique_name, pid_t *pid)
        return UAM_ERROR_NONE;
 }
 
+static int __uam_get_process_name_bypid(const int pid, char *proc_name, int len)
+{
+       char name[MAX_BUFFER_SIZE] = { 0, };
+       snprintf(name, MAX_BUFFER_SIZE, "/proc/%d/cmdline", pid);
+       UAM_DBG("open file %s", name);
+       FILE* f = fopen(name, "r");
+       if (f) {
+               size_t size;
+               size = fread(proc_name, sizeof(char), len, f);
+               if (size > 0) {
+                       if ('\n' == proc_name[size-1])
+                               proc_name[size-1] = '\0';
+               }
+               fclose(f);
+       }
+       UAM_DBG("process name %s", proc_name);
+       return UAM_ERROR_NONE;
+}
+
 static int __uam_get_sender_app_id(const char *unique_name, char *app_id, int len)
 {
        int ret;
@@ -288,8 +310,13 @@ static int __uam_get_sender_app_id(const char *unique_name, char *app_id, int le
 
        ret = aul_app_get_appid_bypid(pid, app_id, len);
        if (ret != AUL_R_OK) {
-               UAM_DBG("app_id not found");
-               return UAM_ERROR_NOT_FOUND;
+               UAM_DBG("app_id not found, Check process name");
+
+               ret = __uam_get_process_name_bypid(pid, app_id, len);
+               if (ret != UAM_ERROR_NONE) {
+                       UAM_DBG("process name not found");
+                       return UAM_ERROR_NOT_FOUND;
+               }
        }
        UAM_DBG("Sender app_id: %s", app_id);
 
@@ -300,7 +327,7 @@ static int _uam_get_sender_app_key(char **app_key, const char *sender)
 {
        FUNC_ENTRY;
        int ret = UAM_ERROR_NONE;
-       char app_id[256] = { 0, };
+       char app_id[MAX_BUFFER_SIZE] = { 0, };
 
        UAM_DBG("Sender %s", sender);
 
@@ -724,11 +751,11 @@ static int __uam_manager_sync_request_handler(
        case UAM_REQUEST_START_LOCATION_DETECTION: {
                        const char *svc_name;
                        unsigned int sensors;
-       
+
                        __uam_manager_copy_params(in_param1,
                                                        &sensors, sizeof(unsigned int));
                        svc_name = (char *)g_variant_get_data(in_param2);
-       
+
                        result = _uam_core_start_location_detection(svc_name,
                                                        sender, sensors, app_num);
                        break;
@@ -736,11 +763,11 @@ static int __uam_manager_sync_request_handler(
        case UAM_REQUEST_STOP_LOCATION_DETECTION: {
                        unsigned int sensors;
                        const char *svc_name;
-       
+
                        __uam_manager_copy_params(in_param1,
                                                        &sensors, sizeof(unsigned int));
                        svc_name = (char *)g_variant_get_data(in_param2);
-       
+
                        result = _uam_core_stop_location_detection(svc_name,
                                                        sender, sensors, app_num);
                        break;