Consider caller uid when handling request
[platform/core/appfw/pkgmgr-server.git] / src / request.c
index 4698da9..3269b24 100644 (file)
@@ -268,7 +268,7 @@ static int __check_caller_permission(uid_t uid,
        return 0;
 }
 
-static int __handle_request_install(uid_t uid,
+static int __handle_request_install(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -327,8 +327,8 @@ static int __handle_request_install(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_INSTALL, pkgtype,
-                               pkgpath, args)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_INSTALL,
+                               pkgtype, pkgpath, args)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
                ret = -1;
@@ -353,7 +353,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_mount_install(uid_t uid,
+static int __handle_request_mount_install(uid_t caller_uid,
        GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -412,7 +412,8 @@ static int __handle_request_mount_install(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_MOUNT_INSTALL,
+       if (_push_queue(target_uid, caller_uid, reqkey,
+                               REQUEST_TYPE_MOUNT_INSTALL,
                                pkgtype, pkgpath, args)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
@@ -437,7 +438,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_reinstall(uid_t uid,
+static int __handle_request_reinstall(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -466,8 +467,8 @@ static int __handle_request_reinstall(uid_t uid,
                free(pkgtype);
                return -1;
        }
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_REINSTALL, pkgtype,
-                               pkgid, NULL)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_REINSTALL,
+                               pkgtype, pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
                free(reqkey);
@@ -483,7 +484,7 @@ static int __handle_request_reinstall(uid_t uid,
        return 0;
 }
 
-static int __handle_request_uninstall(uid_t uid,
+static int __handle_request_uninstall(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -512,8 +513,8 @@ static int __handle_request_uninstall(uid_t uid,
                free(pkgtype);
                return -1;
        }
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_UNINSTALL, pkgtype,
-                               pkgid, NULL)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_UNINSTALL,
+                               pkgtype, pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
                free(reqkey);
@@ -529,7 +530,7 @@ static int __handle_request_uninstall(uid_t uid,
        return 0;
 }
 
-static int __handle_request_move(uid_t uid,
+static int __handle_request_move(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -562,8 +563,8 @@ static int __handle_request_move(uid_t uid,
        }
 
        snprintf(buf, sizeof(buf), "%d", move_type);
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_MOVE, pkgtype,
-                               pkgid, buf)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_MOVE,
+                               pkgtype, pkgid, buf)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
                free(reqkey);
@@ -579,7 +580,7 @@ static int __handle_request_move(uid_t uid,
        return 0;
 }
 
-static int __handle_request_enable_pkgs(uid_t uid,
+static int __handle_request_enable_pkgs(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -611,7 +612,8 @@ static int __handle_request_enable_pkgs(uid_t uid,
                        free(reqkey);
                        return -1;
                }
-               if (_push_queue(target_uid, reqkey, REQUEST_TYPE_ENABLE_PKG,
+               if (_push_queue(target_uid, caller_uid, reqkey,
+                                       REQUEST_TYPE_ENABLE_PKG,
                                        pkgtype, pkgid, NULL)) {
                        g_dbus_method_invocation_return_value(invocation,
                                        g_variant_new("(is)",
@@ -630,7 +632,7 @@ static int __handle_request_enable_pkgs(uid_t uid,
        return 0;
 }
 
-static int __handle_request_disable_pkgs(uid_t uid,
+static int __handle_request_disable_pkgs(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -662,7 +664,8 @@ static int __handle_request_disable_pkgs(uid_t uid,
                        free(reqkey);
                        return -1;
                }
-               if (_push_queue(target_uid, reqkey, REQUEST_TYPE_DISABLE_PKG,
+               if (_push_queue(target_uid, caller_uid, reqkey,
+                                       REQUEST_TYPE_DISABLE_PKG,
                                        pkgtype, pkgid, NULL)) {
                        g_dbus_method_invocation_return_value(invocation,
                                        g_variant_new("(is)",
@@ -681,7 +684,7 @@ static int __handle_request_disable_pkgs(uid_t uid,
        return 0;
 }
 
-static int __handle_request_enable_app(uid_t uid,
+static int __handle_request_enable_app(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -704,7 +707,8 @@ static int __handle_request_enable_app(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_ENABLE_APP, "default",
+       if (_push_queue(target_uid, caller_uid, reqkey,
+                               REQUEST_TYPE_ENABLE_APP, "default",
                                appid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
@@ -724,7 +728,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_disable_app(uid_t uid,
+static int __handle_request_disable_app(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -747,7 +751,8 @@ static int __handle_request_disable_app(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_DISABLE_APP, "default",
+       if (_push_queue(target_uid, caller_uid, reqkey,
+                               REQUEST_TYPE_DISABLE_APP, "default",
                                appid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
@@ -767,7 +772,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_enable_global_app_for_uid(uid_t uid,
+static int __handle_request_enable_global_app_for_uid(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -790,7 +795,7 @@ static int __handle_request_enable_global_app_for_uid(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey,
+       if (_push_queue(target_uid, caller_uid, reqkey,
                                REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID,
                                "default", appid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -811,7 +816,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_disable_global_app_for_uid(uid_t uid,
+static int __handle_request_disable_global_app_for_uid(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -834,7 +839,7 @@ static int __handle_request_disable_global_app_for_uid(uid_t uid,
                goto catch;
        }
 
-       if (_push_queue(target_uid, reqkey,
+       if (_push_queue(target_uid, caller_uid, reqkey,
                                REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID,
                                "default", appid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -855,7 +860,7 @@ catch:
        return ret;
 }
 
-static int __handle_request_getsize(uid_t uid,
+static int __handle_request_getsize(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -879,8 +884,8 @@ static int __handle_request_getsize(uid_t uid,
        }
 
        snprintf(buf, sizeof(buf), "%d", get_type);
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_GETSIZE, "pkgtool",
-                               pkgid, buf)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_GETSIZE,
+                               "pkgtool", pkgid, buf)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(is)", PKGMGR_R_ESYSTEM, ""));
                free(reqkey);
@@ -894,7 +899,7 @@ static int __handle_request_getsize(uid_t uid,
        return 0;
 }
 
-static int __handle_request_cleardata(uid_t uid,
+static int __handle_request_cleardata(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -924,8 +929,8 @@ static int __handle_request_cleardata(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_CLEARDATA, pkgtype,
-                               pkgid, NULL)) {
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_CLEARDATA,
+                               pkgtype, pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
                free(reqkey);
@@ -942,7 +947,7 @@ static int __handle_request_cleardata(uid_t uid,
        return 0;
 }
 
-static int __handle_request_clearcache(uid_t uid,
+static int __handle_request_clearcache(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -955,7 +960,7 @@ static int __handle_request_clearcache(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, NULL, REQUEST_TYPE_CLEARCACHE,
+       if (_push_queue(target_uid, caller_uid, NULL, REQUEST_TYPE_CLEARCACHE,
                                "pkgtool",  pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
@@ -968,7 +973,7 @@ static int __handle_request_clearcache(uid_t uid,
        return 0;
 }
 
-static int __handle_request_kill(uid_t uid,
+static int __handle_request_kill(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -989,7 +994,7 @@ static int __handle_request_kill(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_KILL,
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_KILL,
                                "default", pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(ii)", PKGMGR_R_ESYSTEM, 0));
@@ -1004,7 +1009,7 @@ static int __handle_request_kill(uid_t uid,
        return 0;
 }
 
-static int __handle_request_check(uid_t uid,
+static int __handle_request_check(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -1025,7 +1030,7 @@ static int __handle_request_check(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, reqkey, REQUEST_TYPE_CHECK,
+       if (_push_queue(target_uid, caller_uid, reqkey, REQUEST_TYPE_CHECK,
                                "default", pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(ii)", PKGMGR_R_ESYSTEM, 0));
@@ -1040,7 +1045,7 @@ static int __handle_request_check(uid_t uid,
        return 0;
 }
 
-static int __handle_request_generate_license_request(uid_t uid,
+static int __handle_request_generate_license_request(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        char *reqkey;
@@ -1061,7 +1066,7 @@ static int __handle_request_generate_license_request(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(uid, reqkey,
+       if (_push_queue(caller_uid, caller_uid, reqkey,
                                REQUEST_TYPE_GENERATE_LICENSE_REQUEST,
                                "default", NULL, resp_data)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -1078,7 +1083,7 @@ static int __handle_request_generate_license_request(uid_t uid,
        return 0;
 }
 
-static int __handle_request_register_license(uid_t uid,
+static int __handle_request_register_license(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        char *reqkey;
@@ -1098,7 +1103,8 @@ static int __handle_request_register_license(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(uid, reqkey, REQUEST_TYPE_REGISTER_LICENSE,
+       if (_push_queue(caller_uid, caller_uid, reqkey,
+                               REQUEST_TYPE_REGISTER_LICENSE,
                                "default", NULL, resp_data)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
@@ -1113,7 +1119,7 @@ static int __handle_request_register_license(uid_t uid,
        return 0;
 }
 
-static int __handle_request_decrypt_package(uid_t uid,
+static int __handle_request_decrypt_package(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        char *reqkey;
@@ -1135,7 +1141,8 @@ static int __handle_request_decrypt_package(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(uid, reqkey, REQUEST_TYPE_DECRYPT_PACKAGE,
+       if (_push_queue(caller_uid, caller_uid, reqkey,
+                               REQUEST_TYPE_DECRYPT_PACKAGE,
                                "default", drm_file_path,
                                decrypted_file_path)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -1151,7 +1158,7 @@ static int __handle_request_decrypt_package(uid_t uid,
        return 0;
 }
 
-static int __update_app_splash_screen(uid_t uid,
+static int __update_app_splash_screen(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters,
                int req_type)
 {
@@ -1175,7 +1182,7 @@ static int __update_app_splash_screen(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, reqkey, req_type, "default",
+       if (_push_queue(target_uid, caller_uid, reqkey, req_type, "default",
                                appid, NULL)) {
                ERR("Failed to push request");
                g_dbus_method_invocation_return_value(invocation,
@@ -1193,21 +1200,21 @@ static int __update_app_splash_screen(uid_t uid,
        return 0;
 }
 
-static int __handle_request_enable_app_splash_screen(uid_t uid,
+static int __handle_request_enable_app_splash_screen(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
-       return __update_app_splash_screen(uid, invocation, parameters,
+       return __update_app_splash_screen(caller_uid, invocation, parameters,
                        REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN);
 }
 
-static int __handle_request_disable_app_splash_screen(uid_t uid,
+static int __handle_request_disable_app_splash_screen(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
-       return __update_app_splash_screen(uid, invocation, parameters,
+       return __update_app_splash_screen(caller_uid, invocation, parameters,
                        REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN);
 }
 
-static int __handle_request_set_restriction_mode(uid_t uid,
+static int __handle_request_set_restriction_mode(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -1231,7 +1238,7 @@ static int __handle_request_set_restriction_mode(uid_t uid,
        }
 
        snprintf(buf, sizeof(buf), "%d", mode);
-       if (_push_queue(target_uid, reqkey,
+       if (_push_queue(target_uid, caller_uid, reqkey,
                                REQUEST_TYPE_SET_RESTRICTION_MODE,
                                "default", pkgid, buf)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -1247,7 +1254,7 @@ static int __handle_request_set_restriction_mode(uid_t uid,
        return 0;
 }
 
-static int __handle_request_unset_restriction_mode(uid_t uid,
+static int __handle_request_unset_restriction_mode(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -1271,7 +1278,7 @@ static int __handle_request_unset_restriction_mode(uid_t uid,
        }
 
        snprintf(buf, sizeof(buf), "%d", mode);
-       if (_push_queue(target_uid, reqkey,
+       if (_push_queue(target_uid, caller_uid, reqkey,
                                REQUEST_TYPE_UNSET_RESTRICTION_MODE,
                                "default", pkgid, buf)) {
                g_dbus_method_invocation_return_value(invocation,
@@ -1287,7 +1294,7 @@ static int __handle_request_unset_restriction_mode(uid_t uid,
        return 0;
 }
 
-static int __handle_request_get_restriction_mode(uid_t uid,
+static int __handle_request_get_restriction_mode(uid_t caller_uid,
                GDBusMethodInvocation *invocation, GVariant *parameters)
 {
        uid_t target_uid = (uid_t)-1;
@@ -1308,7 +1315,7 @@ static int __handle_request_get_restriction_mode(uid_t uid,
                return -1;
        }
 
-       if (_push_queue(target_uid, reqkey,
+       if (_push_queue(target_uid, caller_uid, reqkey,
                                REQUEST_TYPE_GET_RESTRICTION_MODE,
                                "default", pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,