Change the processing slot for cleardata/clearcache
[platform/core/appfw/pkgmgr-server.git] / src / request.c
index 238a29f..ee0bfae 100644 (file)
@@ -333,11 +333,11 @@ static int __handle_request_install(uid_t caller_uid,
        }
 
        for (i = 0; i < args_count; i++) {
-               s += strlen(tmp_args[i]);
                strncat(args, tmp_args[i], len - s - 1);
+               s += strlen(tmp_args[i]);
                if (i != args_count - 1) {
-                       s += strlen(" ");
                        strncat(args, " ", len - s - 1);
+                       s += strlen(" ");
                }
        }
 
@@ -427,11 +427,11 @@ static int __handle_request_mount_install(uid_t caller_uid,
        }
 
        for (i = 0; i < args_count; i++) {
-               s += strlen(tmp_args[i]);
                strncat(args, tmp_args[i], len - s - 1);
+               s += strlen(tmp_args[i]);
                if (i != args_count - 1) {
-                       s += strlen(" ");
                        strncat(args, " ", len - s - 1);
+                       s += strlen(" ");
                }
        }
 
@@ -1077,6 +1077,7 @@ static int __handle_request_cleardata(uid_t caller_uid,
 {
        uid_t target_uid = (uid_t)-1;
        char *pkgid = NULL;
+       char *pkgtype;
 
        g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
        if (target_uid == (uid_t)-1 || pkgid == NULL) {
@@ -1085,8 +1086,15 @@ static int __handle_request_cleardata(uid_t caller_uid,
                return -1;
        }
 
+       pkgtype = _get_pkgtype_from_pkgid(pkgid, target_uid);
+       if (pkgtype == NULL) {
+               g_dbus_method_invocation_return_value(invocation,
+                               g_variant_new("(is)", PKGMGR_R_ENOPKG, ""));
+               return -1;
+       }
+
        if (_push_queue(target_uid, caller_uid, NULL, REQUEST_TYPE_CLEARDATA,
-                               "pkgtool", pkgid, NULL)) {
+                               pkgtype, pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
                return -1;
@@ -1103,6 +1111,7 @@ static int __handle_request_clearcache(uid_t caller_uid,
 {
        uid_t target_uid = (uid_t)-1;
        char *pkgid = NULL;
+       char *pkgtype;
 
        g_variant_get(parameters, "(u&s)", &target_uid, &pkgid);
        if (target_uid == (uid_t)-1 || pkgid == NULL) {
@@ -1111,8 +1120,18 @@ static int __handle_request_clearcache(uid_t caller_uid,
                return -1;
        }
 
+       if (strcmp(PKG_CLEAR_ALL_CACHE, pkgid) == 0)
+               pkgtype = strdup("pkgtool");
+       else
+               pkgtype = _get_pkgtype_from_pkgid(pkgid, target_uid);
+       if (pkgtype == NULL) {
+               g_dbus_method_invocation_return_value(invocation,
+                               g_variant_new("(is)", PKGMGR_R_ENOPKG, ""));
+               return -1;
+       }
+
        if (_push_queue(target_uid, caller_uid, NULL, REQUEST_TYPE_CLEARCACHE,
-                               "pkgtool",  pkgid, NULL)) {
+                               pkgtype,  pkgid, NULL)) {
                g_dbus_method_invocation_return_value(invocation,
                                g_variant_new("(i)", PKGMGR_R_ESYSTEM));
                return -1;