Change to add quote using g_shell_quote in some parameter
[platform/core/appfw/pkgmgr-server.git] / src / pkgmgr-server.c
index d390f90..cf55a28 100644 (file)
@@ -661,14 +661,9 @@ static int __change_job_info(struct backend_job *job, uid_t uid,
        if (ret != PMINFO_R_OK)
                goto catch;
 
-       if ((job->req_type == REQUEST_TYPE_DISABLE_APP ||
-                               job->req_type == REQUEST_TYPE_ENABLE_APP) &&
-                       *is_global) {
-               ret = PMINFO_R_ERROR;
-               goto catch;
-       } else if ((job->req_type == REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID ||
-                               job->req_type ==
-                               REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID) &&
+       if ((job->req_type == REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID ||
+                       job->req_type ==
+                       REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID) &&
                        !*is_global) {
                ret = PMINFO_R_ERROR;
                goto catch;
@@ -694,19 +689,28 @@ static int __process_install(struct backend_job *job)
        char *backend_cmd;
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
+       gchar *req_id;
+       gchar *pkgid;
        int pid;
 
        backend_cmd = job->backend_path;
        if (backend_cmd == NULL)
                return -1;
 
+       req_id = g_shell_quote(job->req_id);
+       pkgid = g_shell_quote(job->pkgid);
+       if (!req_id || !pkgid)
+               return -1;
+
        snprintf(args, sizeof(args), "%s -k %s -i %s -u %d %s", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->target_uid, job->args);
+                       req_id, pkgid, (int)job->target_uid, job->args);
 
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
        g_strfreev(argv);
+       g_free(req_id);
+       g_free(pkgid);
 
        return pid;
 }
@@ -716,19 +720,28 @@ static int __process_mount_install(struct backend_job *job)
        char *backend_cmd;
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
+       gchar *req_id;
+       gchar *pkgid;
        int pid;
 
        backend_cmd = job->backend_path;
        if (backend_cmd == NULL)
                return -1;
 
+       req_id = g_shell_quote(job->req_id);
+       pkgid = g_shell_quote(job->pkgid);
+       if (!req_id || !pkgid)
+               return -1;
+
        snprintf(args, sizeof(args), "%s -k %s -w %s -u %d %s", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->target_uid, job->args);
+                       req_id, pkgid, (int)job->target_uid, job->args);
 
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
        g_strfreev(argv);
+       g_free(req_id);
+       g_free(pkgid);
 
        return pid;
 }
@@ -738,19 +751,28 @@ static int __process_reinstall(struct backend_job *job)
        char *backend_cmd;
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
+       gchar *req_id;
+       gchar *pkgid;
        int pid;
 
        backend_cmd = job->backend_path;
        if (backend_cmd == NULL)
                return -1;
 
+       req_id = g_shell_quote(job->req_id);
+       pkgid = g_shell_quote(job->pkgid);
+       if (!req_id || !pkgid)
+               return -1;
+
        snprintf(args, sizeof(args), "%s -k %s -r %s -u %d", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->target_uid);
+                       req_id, pkgid, (int)job->target_uid);
        argv = __generate_argv(args);
 
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
 
        g_strfreev(argv);
+       g_free(req_id);
+       g_free(pkgid);
 
        return pid;
 }
@@ -1012,7 +1034,7 @@ static int __process_enable_global_app_for_uid(struct backend_job *job)
        if (ret != PMINFO_R_OK || strlen(job->appid) == 0) {
                _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,
+                               PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR,
                                job->req_type);
                _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
@@ -1023,7 +1045,7 @@ static int __process_enable_global_app_for_uid(struct backend_job *job)
 
        _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,
+                       PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR,
                        job->req_type);
 
        ret = pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(
@@ -1055,7 +1077,7 @@ static int __process_disable_global_app_for_uid(struct backend_job *job)
                _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,
+                               PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR,
                                job->req_type);
                _send_app_signal(job->target_uid, job->req_id, job->pkgid, job->pkgid,
                                PKGMGR_INSTALLER_END_KEY_STR,
@@ -1067,7 +1089,7 @@ static int __process_disable_global_app_for_uid(struct backend_job *job)
        _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,
+                       PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR,
                        job->req_type);
 
        ret = __kill_app(job->appid, job->target_uid);
@@ -1161,40 +1183,39 @@ error:
 
 static int __process_cleardata(struct backend_job *job)
 {
-       char *backend_cmd;
+       static const char *backend_cmd = "/usr/bin/pkg_cleardata";
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
        int pid;
 
-       backend_cmd = job->backend_path;
-       if (backend_cmd == NULL)
+       if ((int)job->target_uid < REGULAR_USER)
                return -1;
 
-       /* TODO: set movetype */
-       snprintf(args, sizeof(args), "%s -k %s -c %s -u %d", backend_cmd,
-                       job->req_id, job->pkgid, (int)job->target_uid);
+       snprintf(args, sizeof(args), "%s -d -n %s -u %d",
+                       backend_cmd, job->pkgid, job->target_uid);
        argv = __generate_argv(args);
-
        pid = __fork_and_exec_with_args(argv, APPFW_UID);
 
        g_strfreev(argv);
-
        return pid;
 }
 
 static int __process_clearcache(struct backend_job *job)
 {
-       static const char *backend_cmd = "/usr/bin/pkg_clearcache";
+       static const char *backend_cmd = "/usr/bin/pkg_cleardata";
        char **argv;
        char args[MAX_PKG_ARGS_LEN];
        int pid;
 
-       snprintf(args, sizeof(args), "%s %s", backend_cmd, job->pkgid);
+       if ((int)job->target_uid < REGULAR_USER)
+               return -1;
+
+       snprintf(args, sizeof(args), "%s -c -n %s -u %d",
+                       backend_cmd, job->pkgid, job->target_uid);
        argv = __generate_argv(args);
-       pid = __fork_and_exec_with_args(argv, job->target_uid);
+       pid = __fork_and_exec_with_args(argv, APPFW_UID);
 
        g_strfreev(argv);
-
        return pid;
 }
 
@@ -1455,6 +1476,29 @@ static int __process_set_app_label(struct backend_job *job)
        return ret;
 }
 
+static int __process_migrate_external_image(struct backend_job *job)
+{
+       char *backend_cmd;
+       char **argv;
+       char args[MAX_PKG_ARGS_LEN];
+       int pid;
+
+       backend_cmd = job->backend_path;
+       if (backend_cmd == NULL)
+               return -1;
+
+       snprintf(args, sizeof(args), "%s -k %s --migrate-extimg %s -u %d %s",
+                       backend_cmd, job->req_id, job->pkgid,
+                       (int)job->target_uid, job->args);
+
+       argv = __generate_argv(args);
+
+       pid = __fork_and_exec_with_args(argv, APPFW_UID);
+       g_strfreev(argv);
+
+       return pid;
+}
+
 static int __post_process(int ret, int x, struct backend_job *job)
 {
        if (ret < 0) {
@@ -1485,7 +1529,7 @@ gboolean queue_job(void *data)
 
        /* all backend messages queue are empty or busy */
        if (x == num_of_backends || job == NULL) {
-               DBG("no job left");
+               DBG("no job available");
                return FALSE;
        }
 
@@ -1501,7 +1545,7 @@ gboolean queue_job(void *data)
                        ret = -1;
                        _send_fail_signal(job);
                        _free_backend_job(job);
-                       return FALSE;
+                       return TRUE;
                }
        }
 #endif
@@ -1628,12 +1672,17 @@ gboolean queue_job(void *data)
                ret = __process_set_app_label(job);
                _free_backend_job(job);
                break;
+       case REQUEST_TYPE_MIGRATE_EXTERNAL_IMAGE:
+               __set_backend_busy(x);
+               ret = __process_migrate_external_image(job);
+               __post_process(ret, x, job);
+               break;
        default:
                ret = -1;
                break;
        }
 
-       return FALSE;
+       return TRUE;
 }
 
 int main(int argc, char *argv[])