Consider caller uid when handling request
[platform/core/appfw/pkgmgr-server.git] / src / pkgmgr-server.c
index d5b59ee..e4c312f 100644 (file)
@@ -637,7 +637,7 @@ static int __process_install(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -i %s -u %d %s", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid, job->args);
+                       job->req_id, job->pkgid, (int)job->target_uid, job->args);
 
        argv = __generate_argv(args);
 
@@ -659,7 +659,7 @@ static int __process_mount_install(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -w %s -u %d %s", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid, job->args);
+                       job->req_id, job->pkgid, (int)job->target_uid, job->args);
 
        argv = __generate_argv(args);
 
@@ -681,7 +681,7 @@ static int __process_reinstall(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -r %s -u %d", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid);
+                       job->req_id, job->pkgid, (int)job->target_uid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -703,7 +703,7 @@ static int __process_uninstall(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -d %s -u %d", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid);
+                       job->req_id, job->pkgid, (int)job->target_uid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -725,7 +725,7 @@ static int __process_move(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -m %s -u %d -t %s", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid, job->args);
+                       job->req_id, job->pkgid, (int)job->target_uid, job->args);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -747,7 +747,7 @@ static int __process_enable_pkg(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -u %d -A %s", backend_cmd,
-                       job->req_id, (int)job->uid, job->pkgid);
+                       job->req_id, (int)job->target_uid, job->pkgid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -769,7 +769,7 @@ static int __process_disable_pkg(struct backend_job *job)
                return -1;
 
        snprintf(args, sizeof(args), "%s -k %s -u %d -D %s", backend_cmd,
-                       job->req_id, (int)job->uid, job->pkgid);
+                       job->req_id, (int)job->target_uid, job->pkgid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -787,32 +787,32 @@ static int __process_enable_app(struct backend_job *job)
        /* get actual pkgid and replace it to appid which is currently stored
         * at pkgid variable
         */
-       ret = __change_job_info(job, job->uid, &is_global);
+       ret = __change_job_info(job, job->target_uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0) {
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_START_KEY_STR,
                                PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR,
                                job->req_type);
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
                return ret;
        }
 
-       _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+       _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR, job->req_type);
 
        ret = pkgmgr_parser_update_app_disable_info_in_usr_db(job->appid,
-                       job->uid, 0);
+                       job->target_uid, 0);
        if (ret != PMINFO_R_OK)
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        else
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_OK_EVENT_STR,
                                job->req_type);
@@ -828,40 +828,40 @@ static int __process_disable_app(struct backend_job *job)
        /* get actual pkgid and replace it to appid which is currently stored
         * at pkgid variable
         */
-       ret = __change_job_info(job, job->uid, &is_global);
+       ret = __change_job_info(job, job->target_uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0) {
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_START_KEY_STR,
                                PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR,
                                job->req_type);
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
                return ret;
        }
 
-       _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+       _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR, job->req_type);
 
-       ret = __kill_app(job->appid, job->uid);
+       ret = __kill_app(job->appid, job->target_uid);
        if (ret != 0) {
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        }
 
        ret = pkgmgr_parser_update_app_disable_info_in_usr_db(job->appid,
-                       job->uid, 1);
+                       job->target_uid, 1);
        if (ret != PMINFO_R_OK)
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        else
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_OK_EVENT_STR,
                                job->req_type);
@@ -877,33 +877,33 @@ static int __process_enable_global_app_for_uid(struct backend_job *job)
        /* get actual pkgid and replace it to appid which is currently stored
         * at pkgid variable
         */
-       ret = __change_job_info(job, job->uid, &is_global);
+       ret = __change_job_info(job, job->target_uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0) {
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_START_KEY_STR,
                                PKGMGR_INSTALLER_GLOBAL_APP_ENABLE_FOR_UID,
                                job->req_type);
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
                return ret;
        }
 
-       _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+       _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_GLOBAL_APP_ENABLE_FOR_UID,
                        job->req_type);
 
        ret = pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(
-                       job->appid, job->uid, 0);
+                       job->appid, job->target_uid, 0);
        if (ret != PMINFO_R_OK)
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        else
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_OK_EVENT_STR,
                                job->req_type);
@@ -921,35 +921,35 @@ static int __process_disable_global_app_for_uid(struct backend_job *job)
         */
        ret = __change_job_info(job, GLOBAL_USER, &is_global);
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0) {
-               _send_app_signal(job->uid, job->req_id,
+               _send_app_signal(job->target_uid, job->req_id,
                                job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_START_KEY_STR,
                                PKGMGR_INSTALLER_GLOBAL_APP_DISABLE_FOR_UID,
                                job->req_type);
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
                return ret;
        }
 
-       _send_app_signal(job->uid, job->req_id,
+       _send_app_signal(job->target_uid, job->req_id,
                        job->pkgid, job->appid,
                        PKGMGR_INSTALLER_START_KEY_STR,
                        PKGMGR_INSTALLER_GLOBAL_APP_DISABLE_FOR_UID,
                        job->req_type);
 
-       ret = __kill_app(job->appid, job->uid);
+       ret = __kill_app(job->appid, job->target_uid);
        ret = pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(
-                       job->appid, job->uid, 1);
+                       job->appid, job->target_uid, 1);
 
        if (ret != PMINFO_R_OK)
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        else
-               _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                                PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_OK_EVENT_STR,
                                job->req_type);
@@ -959,15 +959,16 @@ static int __process_disable_global_app_for_uid(struct backend_job *job)
 
 static int __process_getsize(struct backend_job *job)
 {
-       static const char *backend_cmd = "/usr/bin/pkg_getsize";
+       static const char backend_cmd[] = "/usr/bin/pkg_getsize";
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
        int pid;
 
-       snprintf(args, sizeof(args), "%s %s %s -k %s", backend_cmd, job->pkgid,
-                       job->args, job->req_id);
+       snprintf(args, sizeof(args), "%s %s %s %d -k %s -u %d",
+                       backend_cmd, job->pkgid, job->args, job->caller_uid,
+                       job->req_id, job->target_uid);
        argv = __generate_argv(args);
-       pid = __fork_and_exec_with_args(argv, job->uid);
+       pid = __fork_and_exec_with_args(argv, APPFW_UID);
 
        g_strfreev(argv);
 
@@ -987,7 +988,7 @@ static int __process_cleardata(struct backend_job *job)
 
        /* TODO: set movetype */
        snprintf(args, sizeof(args), "%s -k %s -c %s -u %d", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->uid);
+                       job->req_id, job->pkgid, (int)job->target_uid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
@@ -1006,7 +1007,7 @@ static int __process_clearcache(struct backend_job *job)
 
        snprintf(args, sizeof(args), "%s %s", backend_cmd, job->pkgid);
        argv = __generate_argv(args);
-       pid = __fork_and_exec_with_args(argv, job->uid);
+       pid = __fork_and_exec_with_args(argv, job->target_uid);
 
        g_strfreev(argv);
 
@@ -1019,7 +1020,7 @@ static int __process_kill(struct backend_job *job)
        pkgmgrinfo_pkginfo_h handle;
        pkgcmd_data *pdata;
 
-       ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(job->pkgid, job->uid,
+       ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(job->pkgid, job->target_uid,
                        &handle);
        if (ret < 0) {
                ERR("Failed to get handle");
@@ -1043,9 +1044,9 @@ static int __process_kill(struct backend_job *job)
                free(pdata);
                return -1;
        }
-       pdata->uid = job->uid;
+       pdata->uid = job->target_uid;
        ret = pkgmgrinfo_appinfo_get_usr_list(handle, PMINFO_ALL_APP,
-                       __pkgcmd_app_cb, pdata, job->uid);
+                       __pkgcmd_app_cb, pdata, job->target_uid);
 
        _return_value_to_caller(job->req_id,
                        g_variant_new("(ii)", PKGMGR_R_OK, pdata->pid));
@@ -1067,7 +1068,7 @@ static int __process_check(struct backend_job *job)
        pkgmgrinfo_pkginfo_h handle;
        pkgcmd_data *pdata;
 
-       ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(job->pkgid, job->uid,
+       ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(job->pkgid, job->target_uid,
                        &handle);
        if (ret < 0) {
                ERR("Failed to get handle");
@@ -1091,9 +1092,9 @@ static int __process_check(struct backend_job *job)
                free(pdata);
                return -1;
        }
-       pdata->uid = job->uid;
+       pdata->uid = job->target_uid;
        ret = pkgmgrinfo_appinfo_get_usr_list(handle, PMINFO_ALL_APP,
-                       __pkgcmd_app_cb, pdata, job->uid);
+                       __pkgcmd_app_cb, pdata, job->target_uid);
 
        _return_value_to_caller(job->req_id,
                        g_variant_new("(ii)", PKGMGR_R_OK, pdata->pid));
@@ -1190,27 +1191,27 @@ static int __process_update_app_splash_screen(struct backend_job *job, int flag)
        bool is_global = false;
        const char *val;
 
-       ret = __change_job_info(job, job->uid, &is_global);
+       ret = __change_job_info(job, job->target_uid, &is_global);
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0)
                return -1;
 
        val = flag ? PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR :
                PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR;
-       _send_app_signal(job->uid, job->req_id, job->pkgid, job->appid,
+       _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->appid,
                        PKGMGR_INSTALLER_START_KEY_STR, val, job->req_type);
 
        if (is_global)
-               ret = pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db(job->appid, job->uid, flag);
+               ret = pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db(job->appid, job->target_uid, flag);
        else
                ret = pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db(
-                       job->appid, job->uid, flag);
+                       job->appid, job->target_uid, flag);
        if (ret != PMINFO_R_OK)
-               _send_app_signal(job->uid, job->req_id, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid,
                                job->appid, PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_FAIL_EVENT_STR,
                                job->req_type);
        else
-               _send_app_signal(job->uid, job->req_id, job->pkgid,
+               _send_app_signal(job->target_uid, job->req_id, job->pkgid,
                                job->appid, PKGMGR_INSTALLER_END_KEY_STR,
                                PKGMGR_INSTALLER_OK_EVENT_STR,
                                job->req_type);
@@ -1224,7 +1225,7 @@ static int __process_set_restriction_mode(struct backend_job *job)
        int mode;
 
        mode = atoi(job->args);
-       ret = _set_restriction_mode(job->uid, job->pkgid, mode);
+       ret = _set_restriction_mode(job->target_uid, job->pkgid, mode);
 
        _return_value_to_caller(job->req_id,
                        g_variant_new("(i)", ret));
@@ -1238,7 +1239,7 @@ static int __process_unset_restriction_mode(struct backend_job *job)
        int mode;
 
        mode = atoi(job->args);
-       ret = _unset_restriction_mode(job->uid, job->pkgid, mode);
+       ret = _unset_restriction_mode(job->target_uid, job->pkgid, mode);
 
        _return_value_to_caller(job->req_id,
                        g_variant_new("(i)", ret));
@@ -1251,7 +1252,7 @@ static int __process_get_restriction_mode(struct backend_job *job)
        int ret;
        int mode = -1;
 
-       ret = _get_restriction_mode(job->uid, job->pkgid, &mode);
+       ret = _get_restriction_mode(job->target_uid, job->pkgid, &mode);
 
        _return_value_to_caller(job->req_id,
                        g_variant_new("(ii)", mode, ret));