Multi user features : 21/25721/3
authorSabera Djelti (sdi2) <sabera.djelti@open.eurogiciel.org>
Tue, 1 Jul 2014 15:38:14 +0000 (17:38 +0200)
committerSabera Djelti (sdi2) <sabera.djelti@open.eurogiciel.org>
Mon, 11 Aug 2014 14:06:11 +0000 (16:06 +0200)
->Add / Use Usr App related fonctions instead of Global App related Functions

Change-Id: Ie2bc23ffe5c3d9c9ef27e47ba218ca21b1b2a0e5
Signed-off-by: Sabera Djelti (sdi2) <sabera.djelti@open.eurogiciel.org>
Signed-off-by: Baptiste DURAND <baptiste.durand@open.eurogiciel.org>
client/include/package-manager.h
client/include/pkgmgr-dbinfo.h
client/include/pkgmgr-internal.h
client/src/pkgmgr-dbinfo.c
client/src/pkgmgr-internal.c
client/src/pkgmgr.c
tool/pkg_cmd.c
tool/pkg_info.c
tool/pkg_initdb.c

index 0908fed..78de658 100755 (executable)
@@ -52,7 +52,8 @@
 
 #include <errno.h>
 #include <stdbool.h>
-
+#include <stdio.h>
+#include <sys/types.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -326,7 +327,10 @@ int pkgmgr_client_install(pkgmgr_client *pc, const char *pkg_type,
                            const char *descriptor_path, const char *pkg_path,
                            const char *optional_file, pkgmgr_mode mode,
                            pkgmgr_handler event_cb, void *data);
-
+int pkgmgr_client_usr_install(pkgmgr_client *pc, const char *pkg_type,
+                           const char *descriptor_path, const char *pkg_path,
+                           const char *optional_file, pkgmgr_mode mode,
+                           pkgmgr_handler event_cb, void *data, uid_t uid);
 /**
  * @brief      This API reinstalls package.
  *
@@ -359,6 +363,7 @@ int pkgmgr_client_reinstall(pkgmgr_client *pc, const char *pkg_type, const char
  * @param[in]  mode            installation mode  - PM_DEFAULT, PM_QUIET
  * @param[in]  event_cb        user callback
  * @param[in]  data            user data
+ * @param[in]  uid     the addressee user id of the instruction
  * @return     request_id (>0), error code(<0) if fail\n
  * @retval     PKGMGR_R_OK     success
  * @retval     PKGMGR_R_EINVAL invalid argument
@@ -367,7 +372,10 @@ int pkgmgr_client_reinstall(pkgmgr_client *pc, const char *pkg_type, const char
 int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type,
                                const char *pkgid, pkgmgr_mode mode,
                                pkgmgr_handler event_cb, void *data);
-
+int pkgmgr_client_usr_uninstall(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_mode mode,
+                               pkgmgr_handler event_cb, void *data, uid_t uid);
+                               
 /**
  * @brief      This API moves installed package to SD card or vice versa.
  *
@@ -378,13 +386,15 @@ int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type,
  * @param[in]  pkgid   application package id
  * @param[in]  move_type               PM_MOVE_TO_INTERNAL or PM_MOVE_TO_SDCARD
  * @param[in]  mode            installation mode  - PM_DEFAULT, PM_QUIET
+ * @param[in]  uid     the addressee user id of the instruction
  * @retval     PKGMGR_R_OK     success
  * @retval     PKGMGR_R_EINVAL invalid argument
  * @retval     PKGMGR_R_ERROR  general error
 */
 int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
                                const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode);
-
+int pkgmgr_client_usr_move(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode, uid_t uid);
 /**
  * @brief      This API moves installed package to SD card or vice versa.
  *
@@ -420,7 +430,8 @@ int pkgmgr_client_move_pkg(pkgmgr_client *pc, const char *pkg_type,
 */
 int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type,
                                const char *pkgid);
-
+int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, uid_t uid);
 /**
  * @brief      This API deactivates package.
  *
@@ -436,7 +447,8 @@ int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type,
 */
 int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type,
                                 const char *pkgid);
-
+int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type,
+                                const char *pkgid, uid_t uid);
 /**
  * @brief      This API activates package.
  *
@@ -450,7 +462,7 @@ int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type,
  * @retval     PKGMGR_R_ECOMM  communication error
 */
 int pkgmgr_client_activate_app(pkgmgr_client *pc, const char *appid);
-
+int pkgmgr_client_usr_activate_app(pkgmgr_client *pc, const char *appid, uid_t uid);
 /**
  * @brief      This API activates package.
  *
@@ -465,7 +477,7 @@ int pkgmgr_client_activate_app(pkgmgr_client *pc, const char *appid);
  * @retval     PKGMGR_R_ECOMM  communication error
 */
 int pkgmgr_client_activate_appv(pkgmgr_client * pc, const char *appid, char *const argv[]);
-
+int pkgmgr_client_usr_activate_appv(pkgmgr_client * pc, const char *appid, char *const argv[], uid_t uid);
 /**
  * @brief      This API deactivates package.
  *
@@ -479,7 +491,7 @@ int pkgmgr_client_activate_appv(pkgmgr_client * pc, const char *appid, char *con
  * @retval     PKGMGR_R_ECOMM  communication error
 */
 int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid);
-
+int pkgmgr_client_usr_deactivate_app(pkgmgr_client *pc, const char *appid, uid_t uid);
 /**
  * @brief      This API deletes application's private data.
  *
@@ -496,7 +508,8 @@ int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid);
 */
 int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
                                const char *appid, pkgmgr_mode mode);
-
+int pkgmgr_client_usr_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
+                               const char *appid, pkgmgr_mode mode, uid_t uid);
 /**
  * @brief      This API set status type to listen for the pkgmgr's broadcasting
  *
@@ -584,7 +597,9 @@ int pkgmgr_client_free_pkginfo(pkgmgr_info * pkg_info);
 int pkgmgr_client_request_service(pkgmgr_request_service_type service_type, int service_mode,
                                        pkgmgr_client * pc, const char *pkg_type, const char *pkgid,
                                        const char *custom_info, pkgmgr_handler event_cb, void *data);
-
+int pkgmgr_client_usr_request_service(pkgmgr_request_service_type service_type, int service_mode,
+                                       pkgmgr_client * pc, const char *pkg_type, const char *pkgid, uid_t uid,
+                                       const char *custom_info, pkgmgr_handler event_cb, void *data);
 /**
  * @brief      This API get package size
  *
@@ -614,7 +629,7 @@ int pkgmgr_client_get_size(pkgmgr_client * pc, const char *pkgid, pkgmgr_getsize
  * @retval     PKGMGR_R_EINVAL invalid argument
  * @retval     PKGMGR_R_ERROR  internal error
 */
-int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data);
+int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data, uid_t uid);
 /** @} */
 
 /**
@@ -637,9 +652,11 @@ int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data);
  * 
  * @param[in]  pkg_type                package type for the package to get infomation
  * @param[in]  pkgid   package id for the package to get infomation
+ * @param[in]  uid     the addressee user id of the instruction
  * @return     package entry pointer if success, NULL if fail\n
 */
 pkgmgr_info * pkgmgr_info_new(const char *pkg_type, const char *pkgid);
+pkgmgr_info * pkgmgr_info_usr_new(const char *pkg_type, const char *pkgid, uid_t uid);
 
 /**
  * @brief      This API  gets the package's information.
@@ -695,6 +712,7 @@ int pkgmgr_pkginfo_get_list(pkgmgr_info_pkg_list_cb pkg_list_cb, void *user_data
  * @return     0 if success, error code(<0) if fail\n
 */
 int pkgmgr_pkginfo_get_pkginfo(const char *pkgid, pkgmgr_pkginfo_h *handle);
+int pkgmgr_pkginfo_get_usr_pkginfo(const char *pkgid, uid_t uid,pkgmgr_pkginfo_h *handle);
 
 /**
  * @brief      This API  gets type of the given package.
index cd9d17e..22b94db 100755 (executable)
@@ -45,6 +45,8 @@
 
 #include <stdbool.h>
 
+#define GLOBAL_USER 0 //@TODO tzpl
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -66,11 +68,12 @@ typedef void* pkgmgr_pkgdbinfo_h;
  *              This API is for backend installers.\n
  *
  * @param[in]          pkgid           package id.
+ * @param[in]  uid     the addressee user id of the instruction
  * @param[out] handle                  package info handle.
  * @return             0 if success, error code(<0) if fail\n
 */
 int pkgmgr_create_pkgdbinfo(const char *pkgid, pkgmgr_pkgdbinfo_h *handle);
-
+int pkgmgr_create_pkgusrdbinfo(const char *pkgid, uid_t uid, pkgmgr_pkgdbinfo_h *handle);
 /**
  * @brief      This API sets the package type in DB.
  *
@@ -194,9 +197,11 @@ int pkgmgr_set_preload_to_pkgdbinfo(pkgmgr_pkgdbinfo_h handle, int preload);
  *              This API is for backend installers.\n
  *
  * @param[in]          handle          package info handle.
+ * @param[in]  uid     the addressee user id of the instruction
  * @return             0 if success, error code(<0) if fail\n
 */
 int pkgmgr_save_pkgdbinfo(pkgmgr_pkgdbinfo_h handle);
+int pkgmgr_save_pkgusrdbinfo(pkgmgr_pkgdbinfo_h handle, uid_t uid);
 
 /**
  * @brief      This API destroy pakage info handle and free the resources.
index fa4b216..75d5722 100755 (executable)
@@ -35,7 +35,7 @@
 typedef package_manager_pkg_info_t package_manager_app_info_t;
 
 
-char *_get_pkg_type_from_desktop_file(const char *pkgid);
+char *_get_pkg_type_from_desktop_file(const char *pkgid, uid_t uid);
 
 package_manager_pkg_info_t *_pkg_malloc_appinfo(int num);
 
index 1688d8f..718dc83 100755 (executable)
@@ -45,6 +45,12 @@ API int pkgmgr_create_pkgdbinfo(const char *pkgid, pkgmgr_pkgdbinfo_h *handle)
        ret = pkgmgrinfo_create_pkgdbinfo(pkgid, handle);
        return ret;
 }
+API int pkgmgr_create_pkgusrdbinfo(const char *pkgid, uid_t uid, pkgmgr_pkgdbinfo_h *handle)
+{
+       int ret = 0;
+       ret = pkgmgrinfo_create_pkgusrdbinfo(pkgid, uid, handle);
+       return ret;
+}
 
 API int pkgmgr_set_type_to_pkgdbinfo(pkgmgr_pkgdbinfo_h handle, const char *type)
 {
@@ -124,6 +130,13 @@ API int pkgmgr_save_pkgdbinfo(pkgmgr_pkgdbinfo_h handle)
        return ret;
 }
 
+API int pkgmgr_save_pkgusrdbinfo(pkgmgr_pkgdbinfo_h handle, uid_t uid)
+{
+       int ret = 0;
+       ret = pkgmgrinfo_save_pkgusrdbinfo(handle, uid);
+       return ret;
+}
+
 API int pkgmgr_destroy_pkgdbinfo(pkgmgr_pkgdbinfo_h handle)
 {
        int ret = 0;
index 1c546db..4c16e34 100755 (executable)
@@ -48,6 +48,8 @@
 #define LOG_TAG "PKGMGR"
 #endif                         /* LOG_TAG */
 
+#define GLOBAL_USER    0 //#define     tzplatform_getenv(TZ_GLOBAL) //TODO
+
 #define IS_WHITESPACE(CHAR) \
        ((CHAR == ' ' || CHAR == '\t' || CHAR == '\r' || CHAR == '\n') ? \
        true : false)
@@ -265,15 +267,20 @@ int _get_mime_extension(const char *mimetype, char *ext, int len)
        return 0;
 }
 
-char *_get_pkg_type_from_desktop_file(const char *pkgid)
+char *_get_pkg_type_from_desktop_file(const char *pkgid, uid_t uid)
 {
        static char pkg_type[PKG_EXT_LEN_MAX];
        
        ail_appinfo_h handle;
        ail_error_e ret;
        char *str;
-
-       ret = ail_package_get_appinfo(pkgid, &handle);
+       if(uid != GLOBAL_USER)
+       {
+               ret = ail_package_get_usr_appinfo(pkgid, &handle, uid);
+       }else
+       {
+               ret = ail_package_get_appinfo(pkgid, &handle);
+       }
        if (ret != AIL_ERROR_OK) {
                return NULL;
        }
index 932a7f6..553ed04 100755 (executable)
@@ -59,6 +59,8 @@
 #define BINSH_NAME     "/bin/sh"
 #define BINSH_SIZE     7
 
+#define GLOBAL_USER    0 //#define     tzplatform_getenv(TZ_GLOBAL) //TODO
+
 static int _get_request_id()
 {
        static int internal_req_id = 1;
@@ -488,7 +490,7 @@ static inline ail_cb_ret_e __appinfo_cb(const ail_appinfo_h appinfo, void *user_
        return ret;
 }
 
-static char *__get_app_info_from_db_by_apppath(const char *apppath)
+static char *__get_app_info_from_db_by_apppath(const char *apppath, uid_t uid)
 {
        char *caller_appid = NULL;
        ail_filter_h filter;
@@ -508,8 +510,12 @@ static char *__get_app_info_from_db_by_apppath(const char *apppath)
                ail_filter_destroy(filter);
                return NULL;
        }
+       
+       if(uid != GLOBAL_USER)
+               ret = ail_filter_count_usr_appinfo(filter, &count, uid);
+       else
+               ret = ail_filter_count_appinfo(filter, &count);
 
-       ret = ail_filter_count_appinfo(filter, &count);
        if (ret != AIL_ERROR_OK) {
                ail_filter_destroy(filter);
                return NULL;
@@ -518,8 +524,11 @@ static char *__get_app_info_from_db_by_apppath(const char *apppath)
                ail_filter_destroy(filter);
                return NULL;
        }
+       if(uid != GLOBAL_USER)
+               ail_filter_list_usr_appinfo_foreach(filter, __appinfo_cb, &caller_appid,uid);
 
-       ail_filter_list_appinfo_foreach(filter, __appinfo_cb, &caller_appid);
+       else
+               ail_filter_list_appinfo_foreach(filter, __appinfo_cb, &caller_appid);   
 
        ail_filter_destroy(filter);
 
@@ -567,7 +576,7 @@ char *__proc_get_cmdline_bypid(int pid)
                return strdup(buf);
 }
 
-static int __get_appid_bypid(int pid, char *pkgname, int len)
+static int __get_appid_bypid(int pid, char *pkgname, int len, uid_t uid)
 {
        char *cmdline = NULL;
        char *caller_appid = NULL;
@@ -576,7 +585,7 @@ static int __get_appid_bypid(int pid, char *pkgname, int len)
        if (cmdline == NULL)
                return -1;
 
-       caller_appid = __get_app_info_from_db_by_apppath(cmdline);
+       caller_appid = __get_app_info_from_db_by_apppath(cmdline, uid);
        snprintf(pkgname, len, "%s", caller_appid);
 
        free(cmdline);
@@ -585,12 +594,12 @@ static int __get_appid_bypid(int pid, char *pkgname, int len)
        return 0;
 }
 
-static char *__get_caller_pkgid()
+static char *__get_caller_pkgid(uid_t uid)
 {
        char *caller_appid[PKG_STRING_LEN_MAX] = {0, };
        char *caller_pkgid = NULL;
 
-       if (__get_appid_bypid(getpid(), caller_appid, sizeof(caller_appid)) < 0) {
+       if (__get_appid_bypid(getpid(), caller_appid, sizeof(caller_appid), uid) < 0) {
                _LOGE("get appid fail!!!\n");
                return NULL;
        }
@@ -883,7 +892,7 @@ catch:
        return ret;
 }
 
-static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move_type move_type, pkgmgr_handler event_cb, void *data)
+static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, uid_t uid, pkgmgr_move_type move_type, pkgmgr_handler event_cb, void *data)
 {
        char *req_key = NULL;
        int req_id = 0;
@@ -904,7 +913,10 @@ static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move
        pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
        retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST\n");
 
-       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if(uid != GLOBAL_USER)
+               ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
+       else
+               ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        retvm_if(ret < 0, PKGMGR_R_ERROR, "pkgmgr_pkginfo_get_pkginfo failed");
 
        ret = pkgmgrinfo_pkginfo_get_type(handle, &pkgtype);
@@ -980,7 +992,7 @@ catch:
        return ret;
 }
 
-static int __check_app_process(pkgmgr_request_service_type service_type, pkgmgr_client * pc, const char *pkgid, void *data)
+static int __check_app_process(pkgmgr_request_service_type service_type, pkgmgr_client * pc, const char *pkgid, uid_t uid, void *data)
 {
        const char *pkgtype;
        char *req_key;
@@ -992,7 +1004,10 @@ static int __check_app_process(pkgmgr_request_service_type service_type, pkgmgr_
        pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
        retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST\n");
 
-       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if (uid != GLOBAL_USER)
+               ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
+       else
+               ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        retvm_if(ret < 0, PKGMGR_R_ERROR, "pkgmgr_pkginfo_get_pkginfo failed");
 
        ret = pkgmgrinfo_pkginfo_get_type(handle, &pkgtype);
@@ -1128,7 +1143,145 @@ API int pkgmgr_client_install(pkgmgr_client * pc, const char *pkg_type,
        char *cookie = NULL;
        char *caller_pkgid = NULL;
 
-       caller_pkgid = __get_caller_pkgid();
+       caller_pkgid = __get_caller_pkgid(GLOBAL_USER);
+       if (caller_pkgid == NULL)
+               _LOGE("caller dont have pkgid..\n");
+
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL");
+
+       /* 0. check the pc type */
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       if (descriptor_path) {
+               retvm_if(strlen(descriptor_path) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "descriptor_path over PKG_STRING_LEN_MAX");
+               retvm_if(access(descriptor_path, F_OK) != 0, PKGMGR_R_EINVAL, "descriptor_path access fail");
+       }
+
+       retvm_if(pkg_path == NULL, PKGMGR_R_EINVAL, "pkg_path is NULL");
+       retvm_if(strlen(pkg_path) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkg_path over PKG_STRING_LEN_MAX");
+       retvm_if(access(pkg_path, F_OK) != 0, PKGMGR_R_EINVAL, "pkg_path access fail");
+
+       if (optional_file)
+               retvm_if(strlen(optional_file) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "optional_file over PKG_STRING_LEN_MAX");
+
+       /* 2. get installer path using pkg_path */
+       if (pkg_type) {
+               installer_path = _get_backend_path_with_type(pkg_type);
+               pkgtype = strdup(pkg_type);
+       } else {
+               installer_path = _get_backend_path(pkg_path);
+               pkgtype = __get_type_from_path(pkg_path);
+       }
+       if (installer_path == NULL) {
+               free(pkgtype);
+               _LOGE("installer_path is NULL\n");
+               return PKGMGR_R_EINVAL;
+       }
+
+       /* 3. generate req_key */
+       req_key = __get_req_key(pkg_path);
+
+       /* 4. add callback info - add callback info to pkgmgr_client */
+       req_id = _get_request_id();
+       __add_op_cbinfo(mpc, req_id, req_key, event_cb, data);
+
+       /* 5. generate argv */
+
+       /*  argv[0] installer path */
+       argv[argcnt++] = installer_path;
+       /* argv[1] */
+       argv[argcnt++] = strdup("-k");
+       /* argv[2] */
+       argv[argcnt++] = req_key;
+       /* argv[3] */
+       argv[argcnt++] = strdup("-i");
+       /* argv[(4)] if exists */
+       if (descriptor_path)
+               argv[argcnt++] = strdup(descriptor_path);
+       /* argv[4] */
+       argv[argcnt++] = strdup(pkg_path);
+       /* argv[(5)] if exists */
+       if (optional_file){
+               argv[argcnt++] = strdup("-o");
+               argv[argcnt++] = strdup(optional_file);
+       }
+       if (caller_pkgid) {
+               argv[argcnt++] = strdup("-p");
+               argv[argcnt++] = strdup(caller_pkgid);
+       }
+
+
+/* argv[6] -q option should be located at the end of command !! */
+       if (mode == PM_QUIET)
+               argv[argcnt++] = strdup("-q");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       for (i = 0; i < argcnt; i++) {
+               temp = g_shell_quote(argv[i]);
+               len += (strlen(temp) + 1);
+               g_free(temp);
+       }
+
+       args = (char *)calloc(len, sizeof(char));
+       tryvm_if(args == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
+
+       strncpy(args, argv[0], len - 1);
+
+       for (i = 1; i < argcnt; i++) {
+               strncat(args, " ", strlen(" "));
+               temp = g_shell_quote(argv[i]);
+               strncat(args, temp, strlen(temp));
+               g_free(temp);
+       }
+       _LOGD("[args] %s [len] %d\n", args, len);
+
+       /* get cookie from security-server */
+       cookie = __get_cookie_from_security_server();
+       tryvm_if(cookie == NULL, ret = PKGMGR_R_ERROR, "__get_cookie_from_security_server is NULL");
+       /******************* end of quote ************************/
+
+       /* 6. request install */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_INSTALLER, pkgtype, pkg_path, args, cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = req_id;
+
+catch:
+       for (i = 0; i < argcnt; i++)
+               free(argv[i]);
+
+       if (args)
+               free(args);
+       if (pkgtype)
+               free(pkgtype);
+       if (cookie)
+               free(cookie);
+
+       return ret;
+}
+API int pkgmgr_client_usr_install(pkgmgr_client * pc, const char *pkg_type,
+                             const char *descriptor_path, const char *pkg_path,
+                             const char *optional_file, pkgmgr_mode mode,
+                             pkgmgr_handler event_cb, void *data, uid_t uid)
+{
+       char *pkgtype = NULL;
+       char *installer_path = NULL;
+       char *req_key = NULL;
+       int req_id = 0;
+       int i = 0;
+       char *argv[PKG_ARGC_MAX] = { NULL, };
+       char *args = NULL;
+       int argcnt = 0;
+       int len = 0;
+       char *temp = NULL;
+       int ret = 0;
+       char *cookie = NULL;
+       char *caller_pkgid = NULL;
+
+       caller_pkgid = __get_caller_pkgid(uid);
        if (caller_pkgid == NULL)
                _LOGE("caller dont have pkgid..\n");
 
@@ -1380,7 +1533,7 @@ API int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type,
        bool removable = false;
        char *caller_pkgid = NULL;
 
-       caller_pkgid = __get_caller_pkgid();
+       caller_pkgid = __get_caller_pkgid(GLOBAL_USER);
        if (caller_pkgid == NULL)
                _LOGE("caller dont have pkgid..\n");
 
@@ -1499,62 +1652,82 @@ catch:
        PKGMGR_END();\
        return ret;
 }
-
-API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
-                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode)
+API int pkgmgr_client_usr_uninstall(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_mode mode,
+                               pkgmgr_handler event_cb, void *data, uid_t uid)
 {
-       const char *pkgtype = NULL;
-       char *installer_path = NULL;
-       char *req_key = NULL;
+       char *pkgtype;
+       char *installer_path;
+       char *req_key;
+       int req_id;
        int i = 0;
        char *argv[PKG_ARGC_MAX] = { NULL, };
        char *args = NULL;
        int argcnt = 0;
        int len = 0;
        char *temp = NULL;
-       int ret = 0;
-       int req_id = 0;
+       int ret = -1;
        char *cookie = NULL;
-       char buf[128] = {'\0'};
+       bool removable = false;
+       char *caller_pkgid = NULL;
+
+       caller_pkgid = __get_caller_pkgid(uid);
+       if (caller_pkgid == NULL)
+               _LOGE("caller dont have pkgid..\n");
 
        /* Check for NULL value of pc */
-       if (pc == NULL) {
-               _LOGD("package manager client handle is NULL\n");
-               return PKGMGR_R_EINVAL;
-       }
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
        pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
-       /*check the pc type */
-       if (mpc->ctype != PC_REQUEST)
-               return PKGMGR_R_EINVAL;
 
-       /*check argument */
-       if (pkgid == NULL)
-               return PKGMGR_R_EINVAL;
+       /* 0. check the pc type */
+       retv_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL);
 
-       if (pkg_type == NULL) {
-               pkgtype = _get_pkg_type_from_desktop_file(pkgid);
-               if (pkgtype == NULL)
-                       return PKGMGR_R_EINVAL;
-       } else
-               pkgtype = pkg_type;
+       /* 1. check argument */
+       retv_if(pkgid == NULL, PKGMGR_R_EINVAL);
 
-       if (strlen(pkgid) >= PKG_STRING_LEN_MAX)
-               return PKGMGR_R_EINVAL;
+       pkgmgr_pkginfo_h handle;
+       ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
 
-       if ((move_type < PM_MOVE_TO_INTERNAL) || (move_type > PM_MOVE_TO_SDCARD))
-               return PKGMGR_R_EINVAL;
+       /*check package id      */
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_pkginfo_get_pkginfo fail");
+       tryvm_if(handle == NULL, ret = PKGMGR_R_EINVAL, "Pkgid(%s) can not find in installed pkg DB! \n", pkgid);
 
-       /* get installer path using pkg_path */
+       /*check running app , terminate app if it is running*/
+       ret = pkgmgr_appinfo_get_list(handle, PM_UI_APP, __app_list_cb, NULL);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_UI_APP fail");
+
+       /*check running app , terminate app if it is running*/
+       ret = pkgmgr_appinfo_get_list(handle, PM_SVC_APP, __app_list_cb, NULL);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_SVC_APP fail");
+
+       /*check type    */
+       ret = pkgmgr_pkginfo_get_type(handle, &pkgtype);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_pkginfo_get_type fail");
+       tryvm_if(pkgtype == NULL, ret = PKGMGR_R_ERROR, "pkgtype is NULL");
+
+       /*check removable, execpt "rpm" type    */
+       if (strcmp(pkgtype, "rpm")) {
+               pkgmgr_pkginfo_is_removable(handle, &removable);
+               tryvm_if(removable == false, ret = PKGMGR_R_ERROR, "Pkgid(%s) can not be removed, This is non-removalbe package...\n", pkgid);
+       }
+
+       /*check pkgid length    */
+       tryvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, ret = PKGMGR_R_EINVAL, "pkgid is too long");
+
+       /* 2. get installer path using pkgtype */
        installer_path = _get_backend_path_with_type(pkgtype);
-       if (installer_path == NULL)
-               return PKGMGR_R_EINVAL;
+       tryvm_if(installer_path == NULL, ret = PKGMGR_R_EINVAL, "installer_path fail");
 
-       /* generate req_key */
+       /* 3. generate req_key */
        req_key = __get_req_key(pkgid);
+
+       /* 4. add callback info - add callback info to pkgmgr_client */
        req_id = _get_request_id();
+       __add_op_cbinfo(mpc, req_id, req_key, event_cb, data);
+
+       /* 5. generate argv */
 
-       /* generate argv */
-       snprintf(buf, 128, "%d", move_type);
        /* argv[0] installer path */
        argv[argcnt++] = installer_path;
        /* argv[1] */
@@ -1562,14 +1735,14 @@ API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
        /* argv[2] */
        argv[argcnt++] = req_key;
        /* argv[3] */
-       argv[argcnt++] = strdup("-m");
+       argv[argcnt++] = strdup("-d");
        /* argv[4] */
        argv[argcnt++] = strdup(pkgid);
-       /* argv[5] */
-       argv[argcnt++] = strdup("-t");
-       /* argv[6] */
-       argv[argcnt++] = strdup(buf);
-       /* argv[7] -q option should be located at the end of command !! */
+       if (caller_pkgid) {
+               argv[argcnt++] = strdup("-p");
+               argv[argcnt++] = caller_pkgid;
+       }
+       /* argv[5] -q option should be located at the end of command !! */
        if (mode == PM_QUIET)
                argv[argcnt++] = strdup("-q");
 
@@ -1581,14 +1754,8 @@ API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
        }
 
        args = (char *)calloc(len, sizeof(char));
-       if (args == NULL) {
-               _LOGD("calloc failed");
-
-               for (i = 0; i < argcnt; i++)
-                       free(argv[i]);
+       tryvm_if(args == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
 
-               return PKGMGR_R_ERROR;
-       }
        strncpy(args, argv[0], len - 1);
 
        for (i = 1; i < argcnt; i++) {
@@ -1598,15 +1765,261 @@ API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
                g_free(temp);
        }
        _LOGD("[args] %s [len] %d\n", args, len);
+
+       /* get cookie from security-server */
+       cookie = __get_cookie_from_security_server();
+       tryvm_if(cookie == NULL, ret = PKGMGR_R_ERROR, "__get_cookie_from_security_server is NULL");
        /******************* end of quote ************************/
 
        /* 6. request install */
-       ret = comm_client_request(mpc->info.request.cc, req_key,
-                                 COMM_REQ_TO_MOVER, pkgtype, pkgid,
-                                 args, cookie, 1);
-       if (ret < 0) {
-               _LOGE("request failed, ret=%d\n", ret);
-
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_INSTALLER, pkgtype, pkgid, args, cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "calloc failed");
+
+       ret = req_id;
+
+catch:
+       for (i = 0; i < argcnt; i++)
+               free(argv[i]);
+
+       if(args)
+               free(args);
+       if (cookie)
+               free(cookie);
+
+       pkgmgr_pkginfo_destroy_pkginfo(handle);
+       PKGMGR_END();\
+       return ret;
+}
+
+API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode)
+{
+       const char *pkgtype = NULL;
+       char *installer_path = NULL;
+       char *req_key = NULL;
+       int i = 0;
+       char *argv[PKG_ARGC_MAX] = { NULL, };
+       char *args = NULL;
+       int argcnt = 0;
+       int len = 0;
+       char *temp = NULL;
+       int ret = 0;
+       int req_id = 0;
+       char *cookie = NULL;
+       char buf[128] = {'\0'};
+
+       /* Check for NULL value of pc */
+       if (pc == NULL) {
+               _LOGD("package manager client handle is NULL\n");
+               return PKGMGR_R_EINVAL;
+       }
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+       /*check the pc type */
+       if (mpc->ctype != PC_REQUEST)
+               return PKGMGR_R_EINVAL;
+
+       /*check argument */
+       if (pkgid == NULL)
+               return PKGMGR_R_EINVAL;
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, GLOBAL_USER);
+               if (pkgtype == NULL)
+                       return PKGMGR_R_EINVAL;
+       } else
+               pkgtype = pkg_type;
+
+       if (strlen(pkgid) >= PKG_STRING_LEN_MAX)
+               return PKGMGR_R_EINVAL;
+
+       if ((move_type < PM_MOVE_TO_INTERNAL) || (move_type > PM_MOVE_TO_SDCARD))
+               return PKGMGR_R_EINVAL;
+
+       /* get installer path using pkg_path */
+       installer_path = _get_backend_path_with_type(pkgtype);
+       if (installer_path == NULL)
+               return PKGMGR_R_EINVAL;
+
+       /* generate req_key */
+       req_key = __get_req_key(pkgid);
+       req_id = _get_request_id();
+
+       /* generate argv */
+       snprintf(buf, 128, "%d", move_type);
+       /* argv[0] installer path */
+       argv[argcnt++] = installer_path;
+       /* argv[1] */
+       argv[argcnt++] = strdup("-k");
+       /* argv[2] */
+       argv[argcnt++] = req_key;
+       /* argv[3] */
+       argv[argcnt++] = strdup("-m");
+       /* argv[4] */
+       argv[argcnt++] = strdup(pkgid);
+       /* argv[5] */
+       argv[argcnt++] = strdup("-t");
+       /* argv[6] */
+       argv[argcnt++] = strdup(buf);
+       /* argv[7] -q option should be located at the end of command !! */
+       if (mode == PM_QUIET)
+               argv[argcnt++] = strdup("-q");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       for (i = 0; i < argcnt; i++) {
+               temp = g_shell_quote(argv[i]);
+               len += (strlen(temp) + 1);
+               g_free(temp);
+       }
+
+       args = (char *)calloc(len, sizeof(char));
+       if (args == NULL) {
+               _LOGD("calloc failed");
+
+               for (i = 0; i < argcnt; i++)
+                       free(argv[i]);
+
+               return PKGMGR_R_ERROR;
+       }
+       strncpy(args, argv[0], len - 1);
+
+       for (i = 1; i < argcnt; i++) {
+               strncat(args, " ", strlen(" "));
+               temp = g_shell_quote(argv[i]);
+               strncat(args, temp, strlen(temp));
+               g_free(temp);
+       }
+       _LOGD("[args] %s [len] %d\n", args, len);
+       /******************* end of quote ************************/
+
+       /* 6. request install */
+       ret = comm_client_request(mpc->info.request.cc, req_key,
+                                 COMM_REQ_TO_MOVER, pkgtype, pkgid,
+                                 args, cookie, 1);
+       if (ret < 0) {
+               _LOGE("request failed, ret=%d\n", ret);
+
+               for (i = 0; i < argcnt; i++)
+                       free(argv[i]);
+
+               free(args);
+               return PKGMGR_R_ECOMM;
+       }
+
+       for (i = 0; i < argcnt; i++)
+               free(argv[i]);
+
+       if (args)
+               free(args);
+
+       return req_id;
+}
+API int pkgmgr_client_usr_move(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode, uid_t uid)
+{
+       const char *pkgtype = NULL;
+       char *installer_path = NULL;
+       char *req_key = NULL;
+       int i = 0;
+       char *argv[PKG_ARGC_MAX] = { NULL, };
+       char *args = NULL;
+       int argcnt = 0;
+       int len = 0;
+       char *temp = NULL;
+       int ret = 0;
+       int req_id = 0;
+       char *cookie = NULL;
+       char buf[128] = {'\0'};
+
+       /* Check for NULL value of pc */
+       if (pc == NULL) {
+               _LOGD("package manager client handle is NULL\n");
+               return PKGMGR_R_EINVAL;
+       }
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+       /*check the pc type */
+       if (mpc->ctype != PC_REQUEST)
+               return PKGMGR_R_EINVAL;
+
+       /*check argument */
+       if (pkgid == NULL)
+               return PKGMGR_R_EINVAL;
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, uid);
+               if (pkgtype == NULL)
+                       return PKGMGR_R_EINVAL;
+       } else
+               pkgtype = pkg_type;
+
+       if (strlen(pkgid) >= PKG_STRING_LEN_MAX)
+               return PKGMGR_R_EINVAL;
+
+       if ((move_type < PM_MOVE_TO_INTERNAL) || (move_type > PM_MOVE_TO_SDCARD))
+               return PKGMGR_R_EINVAL;
+
+       /* get installer path using pkg_path */
+       installer_path = _get_backend_path_with_type(pkgtype);
+       if (installer_path == NULL)
+               return PKGMGR_R_EINVAL;
+
+       /* generate req_key */
+       req_key = __get_req_key(pkgid);
+       req_id = _get_request_id();
+
+       /* generate argv */
+       snprintf(buf, 128, "%d", move_type);
+       /* argv[0] installer path */
+       argv[argcnt++] = installer_path;
+       /* argv[1] */
+       argv[argcnt++] = strdup("-k");
+       /* argv[2] */
+       argv[argcnt++] = req_key;
+       /* argv[3] */
+       argv[argcnt++] = strdup("-m");
+       /* argv[4] */
+       argv[argcnt++] = strdup(pkgid);
+       /* argv[5] */
+       argv[argcnt++] = strdup("-t");
+       /* argv[6] */
+       argv[argcnt++] = strdup(buf);
+       /* argv[7] -q option should be located at the end of command !! */
+       if (mode == PM_QUIET)
+               argv[argcnt++] = strdup("-q");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       for (i = 0; i < argcnt; i++) {
+               temp = g_shell_quote(argv[i]);
+               len += (strlen(temp) + 1);
+               g_free(temp);
+       }
+
+       args = (char *)calloc(len, sizeof(char));
+       if (args == NULL) {
+               _LOGD("calloc failed");
+
+               for (i = 0; i < argcnt; i++)
+                       free(argv[i]);
+
+               return PKGMGR_R_ERROR;
+       }
+       strncpy(args, argv[0], len - 1);
+
+       for (i = 1; i < argcnt; i++) {
+               strncat(args, " ", strlen(" "));
+               temp = g_shell_quote(argv[i]);
+               strncat(args, temp, strlen(temp));
+               g_free(temp);
+       }
+       _LOGD("[args] %s [len] %d\n", args, len);
+       /******************* end of quote ************************/
+
+       /* 6. request install */
+       ret = comm_client_request(mpc->info.request.cc, req_key,
+                                 COMM_REQ_TO_MOVER, pkgtype, pkgid,
+                                 args, cookie, 1);
+       if (ret < 0) {
+               _LOGE("request failed, ret=%d\n", ret);
+
                for (i = 0; i < argcnt; i++)
                        free(argv[i]);
 
@@ -1617,14 +2030,145 @@ API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type,
        for (i = 0; i < argcnt; i++)
                free(argv[i]);
 
-       if (args)
+       if (args)
+               free(args);
+
+       return req_id;
+}
+
+API int pkgmgr_client_move_pkg(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode,
+                               pkgmgr_handler event_cb, void *data)
+{
+       char *pkgtype;
+       char *installer_path;
+       char *req_key;
+       int req_id;
+       int i = 0;
+       char *argv[PKG_ARGC_MAX] = { NULL, };
+       char *args = NULL;
+       int argcnt = 0;
+       int len = 0;
+       char *temp = NULL;
+       int ret = -1;
+       char *cookie = NULL;
+       char buf[128] = {'\0'};
+
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retv_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL);
+
+       /* 1. check argument */
+       retv_if(pkgid == NULL, PKGMGR_R_EINVAL);
+
+       pkgmgr_pkginfo_h handle;
+       ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
+
+       /*check package id      */
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_pkginfo_get_pkginfo fail");
+       tryvm_if(handle == NULL, ret = PKGMGR_R_EINVAL, "Pkgid(%s) can not find in installed pkg DB! \n", pkgid);
+
+       /*check running app , terminate app if it is running*/
+       ret = pkgmgr_appinfo_get_list(handle, PM_UI_APP, __app_list_cb, NULL);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_UI_APP fail");
+
+       /*check running app , terminate app if it is running*/
+       ret = pkgmgr_appinfo_get_list(handle, PM_SVC_APP, __app_list_cb, NULL);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_SVC_APP fail");
+
+       /*check type    */
+       ret = pkgmgr_pkginfo_get_type(handle, &pkgtype);
+       tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_pkginfo_get_type fail");
+       tryvm_if(pkgtype == NULL, ret = PKGMGR_R_ERROR, "pkgtype is NULL");
+
+       /*check pkgid length    */
+       tryvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, ret = PKGMGR_R_EINVAL, "pkgid is too long");
+
+       /*check move_type       */
+       tryvm_if((move_type < PM_MOVE_TO_INTERNAL) || (move_type > PM_MOVE_TO_SDCARD), ret = PKGMGR_R_EINVAL, "move_type is not supported");
+
+       /* 2. get installer path using pkgtype */
+       installer_path = _get_backend_path_with_type(pkgtype);
+       tryvm_if(installer_path == NULL, ret = PKGMGR_R_EINVAL, "installer_path fail");
+
+       /* 3. generate req_key */
+       req_key = __get_req_key(pkgid);
+
+       /* 4. add callback info - add callback info to pkgmgr_client */
+       req_id = _get_request_id();
+       __add_op_cbinfo(mpc, req_id, req_key, event_cb, data);
+
+       /* 5. generate argv */
+       snprintf(buf, 128, "%d", move_type);
+       /* argv[0] installer path */
+       argv[argcnt++] = installer_path;
+       /* argv[1] */
+       argv[argcnt++] = strdup("-k");
+       /* argv[2] */
+       argv[argcnt++] = req_key;
+       /* argv[3] */
+       argv[argcnt++] = strdup("-m");
+       /* argv[4] */
+       argv[argcnt++] = strdup(pkgid);
+       /* argv[5] */
+       argv[argcnt++] = strdup("-t");
+       /* argv[6] */
+       argv[argcnt++] = strdup(buf);
+       /* argv[5] -q option should be located at the end of command !! */
+       if (mode == PM_QUIET)
+               argv[argcnt++] = strdup("-q");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       for (i = 0; i < argcnt; i++) {
+               temp = g_shell_quote(argv[i]);
+               len += (strlen(temp) + 1);
+               g_free(temp);
+       }
+
+       args = (char *)calloc(len, sizeof(char));
+       tryvm_if(args == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
+
+       strncpy(args, argv[0], len - 1);
+
+       for (i = 1; i < argcnt; i++) {
+               strncat(args, " ", strlen(" "));
+               temp = g_shell_quote(argv[i]);
+               strncat(args, temp, strlen(temp));
+               g_free(temp);
+       }
+       _LOGD("[args] %s [len] %d\n", args, len);
+
+       /* get cookie from security-server */
+       cookie = __get_cookie_from_security_server();
+       tryvm_if(cookie == NULL, ret = PKGMGR_R_ERROR, "__get_cookie_from_security_server is NULL");
+       /******************* end of quote ************************/
+
+       /* 6. request install */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_MOVER, pkgtype, pkgid, args, cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "calloc failed");
+
+       ret = req_id;
+
+catch:
+       for (i = 0; i < argcnt; i++)
+               free(argv[i]);
+
+       if(args)
                free(args);
+       if (cookie)
+               free(cookie);
 
-       return req_id;
+       pkgmgr_pkginfo_destroy_pkginfo(handle);
+       PKGMGR_END();\
+       return ret;
 }
 
-API int pkgmgr_client_move_pkg(pkgmgr_client *pc, const char *pkg_type,
-                               const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode,
+API int pkgmgr_client_move_usr_pkg(pkgmgr_client *pc, const char *pkg_type,
+                               const char *pkgid, uid_t uid, pkgmgr_move_type move_type, pkgmgr_mode mode,
                                pkgmgr_handler event_cb, void *data)
 {
        char *pkgtype;
@@ -1653,7 +2197,7 @@ API int pkgmgr_client_move_pkg(pkgmgr_client *pc, const char *pkg_type,
        retv_if(pkgid == NULL, PKGMGR_R_EINVAL);
 
        pkgmgr_pkginfo_h handle;
-       ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
+       ret = pkgmgr_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
 
        /*check package id      */
        tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_pkginfo_get_pkginfo fail");
@@ -1774,7 +2318,47 @@ API int pkgmgr_client_activate(pkgmgr_client * pc, const char *pkg_type,
        retvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
 
        if (pkg_type == NULL) {
-               pkgtype = _get_pkg_type_from_desktop_file(pkgid);
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, GLOBAL_USER);
+               retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
+       } else
+               pkgtype = pkg_type;
+
+       /* 2. generate req_key */
+       req_key = __get_req_key(pkgid);
+       retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL");
+
+       /* 3. request activate */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, pkgid, "1 PKG", cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = PKGMGR_R_OK;
+
+catch:
+       free(req_key);
+       return ret;
+}
+
+API int pkgmgr_client_usr_activate(pkgmgr_client * pc, const char *pkg_type,
+                              const char *pkgid, uid_t uid)
+{
+       const char *pkgtype;
+       char *req_key;
+       char *cookie = NULL;
+       int ret;
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       retvm_if(pkgid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
+       retvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, uid);
                retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
        } else
                pkgtype = pkg_type;
@@ -1814,7 +2398,48 @@ API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type,
        retvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
 
        if (pkg_type == NULL) {
-               pkgtype = _get_pkg_type_from_desktop_file(pkgid);
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, GLOBAL_USER);
+               if (pkgtype == NULL)
+                       return PKGMGR_R_EINVAL;
+       } else
+               pkgtype = pkg_type;
+
+       /* 2. generate req_key */
+       req_key = __get_req_key(pkgid);
+       retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL");
+
+       /* 3. request activate */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, pkgid, "0 PKG", cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = PKGMGR_R_OK;
+
+catch:
+       free(req_key);
+       return ret;
+}
+
+API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type,
+                                const char *pkgid, uid_t uid)
+{
+       const char *pkgtype;
+       char *req_key;
+       char *cookie = NULL;
+       int ret;
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       retvm_if(pkgid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
+       retvm_if(strlen(pkgid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, uid);
                if (pkgtype == NULL)
                        return PKGMGR_R_EINVAL;
        } else
@@ -1853,7 +2478,43 @@ API int pkgmgr_client_activate_app(pkgmgr_client * pc, const char *appid)
        retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
        retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
 
-       pkgtype = _get_pkg_type_from_desktop_file(appid);
+       pkgtype = _get_pkg_type_from_desktop_file(appid, GLOBAL_USER);
+       retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
+
+       /* 2. generate req_key */
+       req_key = __get_req_key(appid);
+       retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL");
+
+       /* 3. request activate */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, appid, "1 APP", cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = PKGMGR_R_OK;
+
+catch:
+       free(req_key);
+       return ret;
+}
+
+API int pkgmgr_client_usr_activate_app(pkgmgr_client * pc, const char *appid, uid_t uid)
+{
+       const char *pkgtype;
+       char *req_key;
+       char *cookie = NULL;
+       int ret;
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
+       retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
+
+       pkgtype = _get_pkg_type_from_desktop_file(appid, uid);
        retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
 
        /* 2. generate req_key */
@@ -1895,7 +2556,88 @@ API int pkgmgr_client_activate_appv(pkgmgr_client * pc, const char *appid, char
        retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
        retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
 
-       pkgtype = _get_pkg_type_from_desktop_file(appid);
+       pkgtype = _get_pkg_type_from_desktop_file(appid, GLOBAL_USER);
+       retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
+
+       /* 2. generate req_key */
+       req_key = __get_req_key(appid);
+       retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       if (argv) {
+               for (i = 0; argv[i]; i++) {
+                       temp = g_shell_quote(argv[i]);
+                       len += (strlen(temp) + 1);
+                       g_free(temp);
+                       argcnt++;
+               }
+
+               if (argcnt) {
+                       args = (char *)calloc(len, sizeof(char));
+                       tryvm_if(args == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
+                       strncpy(args, argv[0], len - 1);
+
+                       for (i = 1; i < argcnt; i++) {
+                               strncat(args, " ", strlen(" "));
+                               temp = g_shell_quote(argv[i]);
+                               strncat(args, temp, strlen(temp));
+                               g_free(temp);
+                       }
+               }
+       }
+
+       argsr = (char *)calloc(strlen("1 APP")+2+len, sizeof(char));
+       tryvm_if(argsr == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
+
+       strncpy(argsr, "1 APP", strlen("1 APP"));
+       if (argcnt) {
+               strncat(argsr, " ", strlen(" "));
+               strncat(argsr, args, strlen(args));
+       }
+
+       _LOGD("argsr [%s]\n", argsr);
+       /******************* end of quote ************************/
+
+       /* 3. request activate */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, appid, argsr, cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = PKGMGR_R_OK;
+
+catch:
+
+       free(req_key);
+       free(args);
+       free(argsr);
+
+       return ret;
+}
+
+API int pkgmgr_client_usr_activate_appv(pkgmgr_client * pc, const char *appid, char *const argv[], uid_t uid)
+{
+       const char *pkgtype;
+       char *req_key;
+       char *cookie = NULL;
+       int ret;
+       int i = 0;
+       char *temp = NULL;
+       int len = 0;
+       int argcnt = 0;
+       char *args = NULL;
+       char *argsr = NULL;
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
+       retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
+
+       pkgtype = _get_pkg_type_from_desktop_file(appid, uid);
        retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
 
        /* 2. generate req_key */
@@ -1928,31 +2670,68 @@ API int pkgmgr_client_activate_appv(pkgmgr_client * pc, const char *appid, char
        argsr = (char *)calloc(strlen("1 APP")+2+len, sizeof(char));
        tryvm_if(argsr == NULL, ret = PKGMGR_R_ERROR, "calloc failed");
 
-       strncpy(argsr, "1 APP", strlen("1 APP"));
-       if (argcnt) {
-               strncat(argsr, " ", strlen(" "));
-               strncat(argsr, args, strlen(args));
-       }
+       strncpy(argsr, "1 APP", strlen("1 APP"));
+       if (argcnt) {
+               strncat(argsr, " ", strlen(" "));
+               strncat(argsr, args, strlen(args));
+       }
+
+       _LOGD("argsr [%s]\n", argsr);
+       /******************* end of quote ************************/
+
+       /* 3. request activate */
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, appid, argsr, cookie, 1);
+       tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
+
+       ret = PKGMGR_R_OK;
+
+catch:
+
+       free(req_key);
+       free(args);
+       free(argsr);
+
+       return ret;
+}
+
+
+API int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid)
+{
+       const char *pkgtype;
+       char *req_key;
+       char *cookie = NULL;
+       int ret;
+       /* Check for NULL value of pc */
+       retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n");
+
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST");
+
+       /* 1. check argument */
+       retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
+       retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
+
+       pkgtype = _get_pkg_type_from_desktop_file(appid, GLOBAL_USER);
+       retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
 
-       _LOGD("argsr [%s]\n", argsr);
-       /******************* end of quote ************************/
+       /* 2. generate req_key */
+       req_key = __get_req_key(appid);
+       retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL");
 
        /* 3. request activate */
-       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, appid, argsr, cookie, 1);
+       ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_ACTIVATOR, pkgtype, appid, "0 APP", cookie, 1);
        tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "request failed, ret=%d", ret);
 
        ret = PKGMGR_R_OK;
 
 catch:
-
        free(req_key);
-       free(args);
-       free(argsr);
-
        return ret;
 }
 
-API int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid)
+API int pkgmgr_client_usr_deactivate_app(pkgmgr_client *pc, const char *appid, uid_t uid)
 {
        const char *pkgtype;
        char *req_key;
@@ -1970,7 +2749,7 @@ API int pkgmgr_client_deactivate_app(pkgmgr_client *pc, const char *appid)
        retvm_if(appid == NULL, PKGMGR_R_EINVAL, "pkgid is NULL");
        retvm_if(strlen(appid) >= PKG_STRING_LEN_MAX, PKGMGR_R_EINVAL, "pkgid length over PKG_STRING_LEN_MAX ");
 
-       pkgtype = _get_pkg_type_from_desktop_file(appid);
+       pkgtype = _get_pkg_type_from_desktop_file(appid, uid);
        retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL");
 
        /* 2. generate req_key */
@@ -1988,7 +2767,6 @@ catch:
        return ret;
 }
 
-
 API int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
                                      const char *appid, pkgmgr_mode mode)
 {
@@ -2021,7 +2799,120 @@ API int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
 
 
        if (pkg_type == NULL) {
-               pkgtype = _get_pkg_type_from_desktop_file(appid);
+               pkgtype = _get_pkg_type_from_desktop_file(appid, GLOBAL_USER);
+               if (pkgtype == NULL)
+                       return PKGMGR_R_EINVAL;
+       } else
+               pkgtype = pkg_type;
+
+       if (strlen(appid) >= PKG_STRING_LEN_MAX)
+               return PKGMGR_R_EINVAL;
+
+       /* 2. get installer path using pkg_path */
+       installer_path = _get_backend_path_with_type(pkgtype);
+       if (installer_path == NULL)
+               return PKGMGR_R_EINVAL;
+
+       /* 3. generate req_key */
+       req_key = __get_req_key(appid);
+
+       /* 4. generate argv */
+
+       /* argv[0] installer path */
+       argv[argcnt++] = installer_path;
+       /* argv[1] */
+       argv[argcnt++] = strdup("-k");
+       /* argv[2] */
+       argv[argcnt++] = req_key;
+       /* argv[3] */
+       argv[argcnt++] = strdup("-c");
+       /* argv[4] */
+       argv[argcnt++] = strdup(appid);
+       /* argv[5] -q option should be located at the end of command !! */
+       if (mode == PM_QUIET)
+               argv[argcnt++] = strdup("-q");
+
+       /*** add quote in all string for special charactor like '\n'***   FIX */
+       for (i = 0; i < argcnt; i++) {
+               temp = g_shell_quote(argv[i]);
+               len += (strlen(temp) + 1);
+               g_free(temp);
+       }
+
+       args = (char *)calloc(len, sizeof(char));
+       if (args == NULL) {
+               _LOGD("calloc failed");
+
+               for (i = 0; i < argcnt; i++)
+                       free(argv[i]);
+
+               return PKGMGR_R_ERROR;
+       }
+       strncpy(args, argv[0], len - 1);
+
+       for (i = 1; i < argcnt; i++) {
+               strncat(args, " ", strlen(" "));
+               temp = g_shell_quote(argv[i]);
+               strncat(args, temp, strlen(temp));
+               g_free(temp);
+       }
+       _LOGD("[args] %s [len] %d\n", args, len);
+       /******************* end of quote ************************/
+
+       /* 6. request clear */
+       ret = comm_client_request(mpc->info.request.cc, req_key,
+                                 COMM_REQ_TO_CLEARER, pkgtype, appid,
+                                 args, cookie, 1);
+       if (ret < 0) {
+               _LOGE("request failed, ret=%d\n", ret);
+
+               for (i = 0; i < argcnt; i++)
+                       free(argv[i]);
+
+               free(args);
+               return PKGMGR_R_ECOMM;
+       }
+
+       for (i = 0; i < argcnt; i++)
+               free(argv[i]);
+
+       free(args);
+
+       return PKGMGR_R_OK;
+}
+API int pkgmgr_client_usr_clear_user_data(pkgmgr_client *pc, const char *pkg_type,
+                                     const char *appid, pkgmgr_mode mode, uid_t uid)
+{
+       const char *pkgtype;
+       char *installer_path;
+       char *req_key;
+       int i = 0;
+       char *argv[PKG_ARGC_MAX] = { NULL, };
+       char *args = NULL;
+       int argcnt = 0;
+       int len = 0;
+       char *temp = NULL;
+       int ret;
+       char *cookie = NULL;
+
+       /* Check for NULL value of pc */
+       if (pc == NULL) {
+               _LOGD("package manager client handle is NULL\n");
+               return PKGMGR_R_EINVAL;
+       }
+       pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
+
+       /* 0. check the pc type */
+       if (mpc->ctype != PC_REQUEST)
+               return PKGMGR_R_EINVAL;
+
+       /* 1. check argument */
+       if (appid == NULL)
+               return PKGMGR_R_EINVAL;
+
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(appid, uid);
                if (pkgtype == NULL)
                        return PKGMGR_R_EINVAL;
        } else
@@ -2258,7 +3149,72 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
                tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
                tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_SDCARD), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
 
-               ret = __move_pkg_process(pc, pkgid, (pkgmgr_move_type)service_mode, event_cb, data);
+               ret = __move_pkg_process(pc, pkgid, GLOBAL_USER, (pkgmgr_move_type)service_mode, event_cb, data);
+               break;
+
+       case PM_REQUEST_GET_SIZE:
+               tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
+               tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
+               tryvm_if((service_mode < PM_GET_TOTAL_SIZE) || (service_mode >= PM_GET_MAX), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
+
+               ret = __get_size_process(pc, pkgid, (pkgmgr_getsize_type)service_mode, event_cb, data);
+               break;
+
+       case PM_REQUEST_KILL_APP:
+       case PM_REQUEST_CHECK_APP:
+               tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
+               tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
+
+               ret = __check_app_process(service_type, pc, pkgid, GLOBAL_USER, data);
+               if (ret < 0)
+                       _LOGE("__check_app_process fail \n");
+               else
+                       ret = PKGMGR_R_OK;
+
+               break;
+
+       default:
+               _LOGE("Wrong Request\n");
+               ret = -1;
+               break;
+       }
+
+catch:
+
+       return ret;
+}
+
+API int pkgmgr_client_usr_request_service(pkgmgr_request_service_type service_type, int service_mode,
+                                 pkgmgr_client * pc, const char *pkg_type, const char *pkgid, uid_t uid,
+                             const char *custom_info, pkgmgr_handler event_cb, void *data)
+{
+       int ret =0;
+
+       /* Check for NULL value of service type */
+       retvm_if(service_type > PM_REQUEST_MAX, PKGMGR_R_EINVAL, "service type is not defined\n");
+       retvm_if(service_type < 0, PKGMGR_R_EINVAL, "service type is error\n");
+       vconf_set_int(VCONFKEY_PKGMGR_STATUS, -1);
+
+       switch (service_type) {
+       case PM_REQUEST_CSC:
+               tryvm_if(custom_info == NULL, ret = PKGMGR_R_EINVAL, "custom_info is NULL\n");
+               tryvm_if(strlen(custom_info) >= PKG_STRING_LEN_MAX, ret = PKGMGR_R_EINVAL, "optional_file over PKG_STRING_LEN_MAX");
+               tryvm_if(data == NULL, ret = PKGMGR_R_EINVAL, "data is NULL\n");
+
+               ret = __csc_process(custom_info, (char *)data);
+               if (ret < 0)
+                       _LOGE("__csc_process fail \n");
+               else
+                       ret = PKGMGR_R_OK;
+
+               break;
+
+       case PM_REQUEST_MOVE:
+               tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
+               tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
+               tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_SDCARD), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
+
+               ret = __move_pkg_process(pc, pkgid, uid, (pkgmgr_move_type)service_mode, event_cb, data);
                break;
 
        case PM_REQUEST_GET_SIZE:
@@ -2274,7 +3230,7 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
                tryvm_if(pkgid == NULL, ret = PKGMGR_R_EINVAL, "pkgid is NULL\n");
                tryvm_if(pc == NULL, ret = PKGMGR_R_EINVAL, "pc is NULL\n");
 
-               ret = __check_app_process(service_type, pc, pkgid, data);
+               ret = __check_app_process(service_type, pc, pkgid, uid, data);
                if (ret < 0)
                        _LOGE("__check_app_process fail \n");
                else
@@ -2392,7 +3348,7 @@ ail_cb_ret_e __appinfo_func(const ail_appinfo_h appinfo, void *user_data)
        return AIL_CB_RET_CONTINUE;
 }
 
-API int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data)
+API int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data, uid_t uid)
 {
        int cnt = -1;
        ail_filter_h filter;
@@ -2417,8 +3373,14 @@ API int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data)
                ail_filter_destroy(filter);
                return PKGMGR_R_ERROR;
        }
-
-       ret = ail_filter_count_appinfo(filter, &cnt);
+       
+       if(uid != GLOBAL_USER)
+       {
+               ret = ail_filter_count_usr_appinfo(filter, &cnt, uid);
+       }else
+       {
+               ret = ail_filter_count_appinfo(filter, &cnt);
+       }
        if (ret != AIL_ERROR_OK) {
                ail_filter_destroy(filter);
                return PKGMGR_R_ERROR;
@@ -2433,9 +3395,14 @@ API int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data)
        }
        udata->iter_fn = iter_fn;
        udata->data = data;
-
-       ail_filter_list_appinfo_foreach(filter, __appinfo_func, udata);
-
+       
+       if(uid != GLOBAL_USER)
+       {
+               ail_filter_list_usr_appinfo_foreach(filter, __appinfo_func, udata, uid);
+       }else
+       {
+               ail_filter_list_appinfo_foreach(filter, __appinfo_func, udata);
+       }
        free(udata);
 
        ret = ail_filter_destroy(filter);
@@ -2457,7 +3424,59 @@ API pkgmgr_info *pkgmgr_info_new(const char *pkg_type, const char *pkgid)
                return NULL;
 
        if (pkg_type == NULL) {
-               pkgtype = _get_pkg_type_from_desktop_file(pkgid);
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, GLOBAL_USER);
+               if (pkgtype == NULL)
+                       return NULL;
+       } else
+               pkgtype = pkg_type;
+
+       if (strlen(pkgid) >= PKG_STRING_LEN_MAX)
+               return NULL;
+
+       pkg_detail_info = calloc(1, sizeof(package_manager_pkg_detail_info_t));
+       if (pkg_detail_info == NULL) {
+               _LOGE("*** Failed to alloc package_handler_info.\n");
+               return NULL;
+       }
+
+       plugin_set = _package_manager_load_library(pkgtype);
+       if (plugin_set == NULL) {
+               _LOGE("*** Failed to load library");
+               free(pkg_detail_info);
+               return NULL;
+       }
+
+       if (plugin_set->pkg_is_installed) {
+               if (plugin_set->pkg_is_installed(pkgid) != 0) {
+                       _LOGE("*** Failed to call pkg_is_installed()");
+                       free(pkg_detail_info);
+                       return NULL;
+               }
+
+               if (plugin_set->get_pkg_detail_info) {
+                       if (plugin_set->get_pkg_detail_info(pkgid,
+                                                           pkg_detail_info) != 0) {
+                               _LOGE("*** Failed to call get_pkg_detail_info()");
+                               free(pkg_detail_info);
+                               return NULL;
+                       }
+               }
+       }
+
+       return (pkgmgr_info *) pkg_detail_info;
+}
+API pkgmgr_info *pkgmgr_info_usr_new(const char *pkg_type, const char *pkgid, uid_t uid)
+{
+       const char *pkgtype;
+       pkg_plugin_set *plugin_set = NULL;
+       package_manager_pkg_detail_info_t *pkg_detail_info = NULL;
+
+       /* 1. check argument */
+       if (pkgid == NULL)
+               return NULL;
+
+       if (pkg_type == NULL) {
+               pkgtype = _get_pkg_type_from_desktop_file(pkgid, uid);
                if (pkgtype == NULL)
                        return NULL;
        } else
@@ -2587,6 +3606,12 @@ API int pkgmgr_pkginfo_get_pkginfo(const char *pkgid, pkgmgr_pkginfo_h *handle)
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, handle);
        return ret;
 }
+API int pkgmgr_pkginfo_get_usr_pkginfo(const char *pkgid, uid_t uid, pkgmgr_pkginfo_h *handle)
+{
+       int ret = 0;
+       ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, handle);
+       return ret;
+}
 
 API int pkgmgr_pkginfo_get_pkgname(pkgmgr_pkginfo_h handle, char **pkg_name)
 {
index 56d0eca..09c1907 100755 (executable)
@@ -50,7 +50,7 @@
 static int __process_request();
 static void __print_usage();
 static int __is_authorized();
-static int __is_app_installed(char *pkgid);
+static int __is_app_installed(char *pkgid, uid_t uid);
 static void __print_pkg_info(pkgmgr_info * pkg_info);
 static int __return_cb(int req_id, const char *pkg_type, const char *pkgid,
                       const char *key, const char *val, const void *pmsg,
@@ -266,13 +266,19 @@ static int __convert_to_absolute_path(char *path)
        return 0;
 }
 
-static int __is_app_installed(char *pkgid)
+static int __is_app_installed(char *pkgid, uid_t uid)
 {
 #if 0
        ail_appinfo_h handle;
        ail_error_e ret;
        char *str = NULL;
-       ret = ail_package_get_appinfo(pkgid, &handle);
+       if (uid != GLOBAL_USER)
+       {
+               ret = ail_package_get_usr_appinfo(pkgid, &handle, uid);
+       }else
+       {
+               ret = ail_package_get_appinfo(pkgid, &handle);
+       }
        if (ret != AIL_ERROR_OK) {
                return -1;
        }
@@ -508,7 +514,7 @@ static int __pkg_list_cb (const pkgmgrinfo_pkginfo_h handle, void *user_data)
        return 0;
 }
 
-static int __process_request()
+static int __process_request(uid_t uid)
 {
        int ret = -1;
        int mode = PM_DEFAULT;
@@ -536,16 +542,35 @@ static int __process_request()
                else
                        mode = PM_QUIET;
                if (data.des_path[0] == '\0')
-                       ret =
+               {
+                       if(uid != GLOBAL_USER)
+                       {
+                               ret =
+                                       pkgmgr_client_usr_install(pc, data.pkg_type, NULL,
+                                                       data.pkg_path, NULL, mode,
+                                                       __return_cb, pc, uid);
+                       }else
+                       {
+                               ret =
                            pkgmgr_client_install(pc, data.pkg_type, NULL,
                                                  data.pkg_path, NULL, mode,
                                                  __return_cb, pc);
-               else
-                       ret =
-                           pkgmgr_client_install(pc, data.pkg_type,
-                                                 data.des_path, data.pkg_path,
-                                                 NULL, mode, __return_cb, pc);
-               if (ret < 0){
+                       }
+               }else{
+                       if(uid != GLOBAL_USER)
+                       {
+                               ret =
+                                       pkgmgr_client_usr_install(pc, data.pkg_type,
+                                                       data.des_path, data.pkg_path,
+                                                       NULL, mode, __return_cb, pc, uid);
+                       }else
+                       {
+                               ret =
+                                       pkgmgr_client_install(pc, data.pkg_type,
+                                                       data.des_path, data.pkg_path,
+                                                       NULL, mode, __return_cb, pc);
+                       }
+               }if (ret < 0){
                        data.result = PKGCMD_ERR_FATAL_ERROR;
                        if (access(data.pkg_path, F_OK) != 0)
                                data.result = PKGCMD_ERR_PACKAGE_NOT_FOUND;
@@ -575,7 +600,7 @@ static int __process_request()
                else
                        mode = PM_QUIET;
 
-               ret = __is_app_installed(data.pkgid);
+               ret = __is_app_installed(data.pkgid, uid);
                if (ret == -1) {
                        printf("package is not installed\n");
                        break;
@@ -640,13 +665,20 @@ static int __process_request()
                        mode = PM_DEFAULT;
                else
                        mode = PM_QUIET;
-               ret = __is_app_installed(data.pkgid);
+               ret = __is_app_installed(data.pkgid, uid);
                if (ret == -1) {
                        printf("package is not installed\n");
                        break;
                }
-               ret = pkgmgr_client_clear_user_data(pc, data.pkg_type,
+               if(uid != GLOBAL_USER)
+               {
+                       ret = pkgmgr_client_clear_user_data(pc, data.pkg_type,
+                                                   data.pkgid, mode);
+               }else
+               {
+                       ret = pkgmgr_client_clear_user_data(pc, data.pkg_type,
                                                    data.pkgid, mode);
+               }
                if (ret < 0)
                        break;
                ret = data.result;
@@ -669,7 +701,13 @@ static int __process_request()
 
                if ( strcmp(data.pkg_type, "app") == 0 ) {
                        if (strlen(data.label) == 0) {
-                               ret = pkgmgr_client_activate_app(pc, data.pkgid);
+                               if (uid != GLOBAL_USER)
+                               {
+                                       ret = pkgmgr_client_usr_activate_app(pc, data.pkgid, uid);
+                               }else
+                               {
+                                       ret = pkgmgr_client_activate_app(pc, data.pkgid);
+                               }
                                if (ret < 0)
                                        break;
                        } else {
@@ -677,12 +715,24 @@ static int __process_request()
                                char *largv[3] = {NULL, };
                                largv[0] = "-l";
                                largv[1] = data.label;
-                               ret = pkgmgr_client_activate_appv(pc, data.pkgid, largv);
+                               if(uid != GLOBAL_USER)
+                               {
+                                       ret = pkgmgr_client_usr_activate_appv(pc, data.pkgid, largv, uid);
+                               }else
+                               {
+                                       ret = pkgmgr_client_activate_appv(pc, data.pkgid, largv);
+                               }
                                if (ret < 0)
                                        break;
                        }
                } else {
-                       ret = pkgmgr_client_activate(pc, data.pkg_type, data.pkgid);
+                       if (uid != GLOBAL_USER)
+                       {
+                               ret = pkgmgr_client_usr_activate(pc, data.pkg_type, data.pkgid, uid);
+                       }else
+                       {
+                               ret = pkgmgr_client_activate(pc, data.pkg_type, data.pkgid);
+                       }
                        if (ret < 0)
                                break;
                }
@@ -707,11 +757,23 @@ static int __process_request()
                }
 
                if ( strcmp(data.pkg_type, "app") == 0 ) {
-                       ret = pkgmgr_client_deactivate_app(pc, data.pkgid);
+                       if (uid != GLOBAL_USER)
+                       {
+                               ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid, uid);
+                       }else
+                       {
+                               ret = pkgmgr_client_deactivate_app(pc, data.pkgid);
+                       }
                        if (ret < 0)
                                break;
-               } else {
-                       ret = pkgmgr_client_deactivate(pc, data.pkg_type, data.pkgid);
+               }else {
+                       if(uid != GLOBAL_USER)
+                       {
+                               ret = pkgmgr_client_usr_deactivate(pc, data.pkg_type, data.pkgid, uid);
+                       }else
+                       {
+                               ret = pkgmgr_client_deactivate(pc, data.pkg_type, data.pkgid);
+                       }
                        if (ret < 0)
                                break;
                }
@@ -738,14 +800,21 @@ static int __process_request()
                        break;
                }
                mode = PM_QUIET;
-               ret = __is_app_installed(data.pkgid);
+               ret = __is_app_installed(data.pkgid, uid);
                if (ret == -1) {
                        printf("package is not installed\n");
                        break;
                }
                if (data.quiet == 0)
-                       ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid,  data.type, mode);
-               else
+               {
+                       if(uid != GLOBAL_USER)
+                       {
+                               ret = pkgmgr_client_usr_move(pc, data.pkg_type, data.pkgid,  data.type, mode, uid);
+                       }else
+                       {
+                               ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid,  data.type, mode);
+                       }
+               }else
                        ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL);
 
                printf("pkg[%s] move result = %d\n", data.pkgid, ret);
@@ -864,8 +933,16 @@ static int __process_request()
 
        case SHOW_REQ:
                if (data.pkgid[0] != '\0') {
-                       pkgmgr_info *pkg_info =
-                           pkgmgr_info_new(data.pkg_type, data.pkgid);
+                       pkgmgr_info *pkg_info;
+                       if(uid != GLOBAL_USER)
+                       {
+                               pkg_info =
+                                       pkgmgr_info_usr_new(data.pkg_type, data.pkgid, uid);
+                       }else
+                       {
+                               pkg_info =
+                                       pkgmgr_info_new(data.pkg_type, data.pkgid);
+                       }
                        if (pkg_info == NULL) {
                                printf("Failed to get pkginfo handle\n");
                                ret = -1;
@@ -1116,7 +1193,7 @@ int main(int argc, char *argv[])
 
                }
        }
-       ret = __process_request();
+       ret = __process_request(getuid());
        if ((ret == -1) && (data.result != 0))
                data.result = PKGCMD_ERR_ARGUMENT_INVALID;
 
index 9693a1a..d7c4b7e 100755 (executable)
 
 
 static void __print_usage();
-static int __get_pkg_info(char *pkgid);
+static int __get_pkg_info(char *pkgid, uid_t uid);
 static int __get_app_info(char *appid);
-static int __get_app_list(char *pkgid);
+static int __get_app_list(char *pkgid, uid_t uid);
 static int __get_app_category_list(char *appid);
 static int __get_app_metadata_list(char *appid);
 static int __get_app_control_list(char *appid);
 static int __get_pkg_list(void);
-static int __get_installed_app_list();
+static int __get_installed_app_list(uid_t uid);
 static int __add_app_filter(void);
 static int __add_pkg_filter(void);
-static int __insert_manifest_in_db(char *manifest);
-static int __remove_manifest_from_db(char *manifest);
-static int __set_pkginfo_in_db(char *pkgid);
+static int __insert_manifest_in_db(char *manifest, uid_t uid);
+static int __remove_manifest_from_db(char *manifest, uid_t uid);
+static int __set_pkginfo_in_db(char *pkgid, uid_t uid);
 static int __set_certinfo_in_db(char *pkgid);
 static int __get_certinfo_from_db(char *pkgid);
 static int __del_certinfo_from_db(char *pkgid);
@@ -1135,7 +1135,7 @@ static int __compare_pkg_certinfo_from_db(char *lhs_pkgid, char *rhs_pkgid)
        return 0;
 }
 
-static int __compare_app_certinfo_from_db(char *lhs_appid, char *rhs_appid)
+static int __compare_app_certinfo_from_db(char *lhs_appid, char *rhs_appid, uid_t uid)
 {
        if (lhs_appid == NULL || rhs_appid == NULL) {
                printf("appid is NULL\n");
@@ -1144,7 +1144,10 @@ static int __compare_app_certinfo_from_db(char *lhs_appid, char *rhs_appid)
 
        int ret = 0;
        pkgmgrinfo_cert_compare_result_type_e result;
-       ret = pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_appid, rhs_appid, &result);
+       if (uid != GLOBAL_USER)
+               ret = pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_appid, rhs_appid, uid, &result);
+       else
+               ret = pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_appid, rhs_appid, &result);
        if (ret != PMINFO_R_OK) {
                return -1;
        }
@@ -1325,7 +1328,7 @@ err:
        return ret;
 }
 
-static int __set_pkginfo_in_db(char *pkgid)
+static int __set_pkginfo_in_db(char *pkgid, uid_t uid)
 {
        if (pkgid == NULL) {
                printf("pkgid is NULL\n");
@@ -1340,7 +1343,13 @@ static int __set_pkginfo_in_db(char *pkgid)
        pkgmgr_pkgdbinfo_h handle = NULL;
        INSTALL_LOCATION storage = 0;
 
-       ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
+       if(uid != GLOBAL_USER)
+       {
+               ret = pkgmgrinfo_create_pkgusrdbinfo(pkgid, uid, &handle);
+       }else
+       {
+               ret = pkgmgrinfo_create_pkgdbinfo(pkgid, &handle);
+       }
        if (ret < 0) {
                printf("pkgmgrinfo_create_pkgdbinfo failed\n");
                return -1;
@@ -1543,14 +1552,20 @@ static int __set_pkginfo_in_db(char *pkgid)
        return 0;
 }
 
-static int __insert_manifest_in_db(char *manifest)
+static int __insert_manifest_in_db(char *manifest, uid_t uid)
 {
        int ret = 0;
        if (manifest == NULL) {
                printf("Manifest file is NULL\n");
                return -1;
        }
-       ret = pkgmgr_parser_parse_manifest_for_installation(manifest, NULL);
+       if (uid != GLOBAL_USER)
+       {
+               ret = pkgmgr_parser_parse_usr_manifest_for_installation(manifest, uid, NULL);
+       }else
+       {
+               ret = pkgmgr_parser_parse_manifest_for_installation(manifest, NULL);
+       }
        if (ret < 0) {
                printf("insert in db failed\n");
                return -1;
@@ -1558,7 +1573,7 @@ static int __insert_manifest_in_db(char *manifest)
        return 0;
 }
 
-static int __fota_insert_manifest_in_db(char *manifest)
+static int __fota_insert_manifest_in_db(char *manifest, uid_t uid)
 {
        int ret = 0;
        char *temp[] = {"fota=true", NULL};
@@ -1567,7 +1582,13 @@ static int __fota_insert_manifest_in_db(char *manifest)
                printf("Manifest file is NULL\n");
                return -1;
        }
-       ret = pkgmgr_parser_parse_manifest_for_installation(manifest, temp);
+       if (uid != GLOBAL_USER)
+       {
+               ret = pkgmgr_parser_parse_usr_manifest_for_installation(manifest, uid, NULL);
+       }else
+       {
+               ret = pkgmgr_parser_parse_manifest_for_installation(manifest, NULL);
+       }
        if (ret < 0) {
                printf("insert in db failed\n");
                return -1;
@@ -1575,14 +1596,20 @@ static int __fota_insert_manifest_in_db(char *manifest)
        return 0;
 }
 
-static int __remove_manifest_from_db(char *manifest)
+static int __remove_manifest_from_db(char *manifest, uid_t uid)
 {
        int ret = 0;
        if (manifest == NULL) {
                printf("Manifest file is NULL\n");
                return -1;
        }
-       ret = pkgmgr_parser_parse_manifest_for_uninstallation(manifest, NULL);
+       if (uid != GLOBAL_USER)
+       {
+               ret = pkgmgr_parser_parse_usr_manifest_for_uninstallation(manifest, uid, NULL);
+       }else
+       {
+               ret = pkgmgr_parser_parse_manifest_for_uninstallation(manifest, NULL);
+       }
        if (ret < 0) {
                printf("remove from db failed\n");
                return -1;
@@ -1783,10 +1810,13 @@ static int __get_pkg_list()
        return 0;
 }
 
-static int __get_installed_app_list()
+static int __get_installed_app_list(uid_t uid)
 {
        int ret = -1;
-       ret = pkgmgrinfo_appinfo_get_installed_list(app_func, NULL);
+       if(uid != GLOBAL_USER)
+               ret = pkgmgrinfo_appinfo_get_usr_installed_list(app_func, uid, NULL);
+       else
+               ret = pkgmgrinfo_appinfo_get_installed_list(app_func, NULL);
        if (ret < 0) {
                printf("pkgmgrinfo_appinfo_get_installed_list() failed\n");
                return -1;
@@ -1937,12 +1967,15 @@ static int __set_app_enabled(char *appid, bool enabled)
        return 0;
 }
 
-static int __get_app_list(char *pkgid)
+static int __get_app_list(char *pkgid, uid_t uid)
 {
        pkgmgr_pkginfo_h handle;
        int ret = -1;
        char *test_data = "test data";
-       ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
+       if(uid != GLOBAL_USER)
+               ret = pkgmgr_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
+       else
+               ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret < 0) {
                printf("Failed to get handle\n");
                return -1;
@@ -1961,13 +1994,16 @@ static int __get_app_list(char *pkgid)
        return 0;
 }
 
-static int __get_pkg_info(char *pkgid)
+static int __get_pkg_info(char *pkgid, uid_t uid)
 {
        pkgmgrinfo_pkginfo_h handle;
        int ret = -1;
 
        printf("Get Pkg Info Called [%s]\n", pkgid);
-       ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+       if(uid != GLOBAL_USER)
+               ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, &handle);
+       else
+               ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
        if (ret < 0) {
                printf("Failed to get handle\n");
                return -1;
@@ -2193,7 +2229,7 @@ int main(int argc, char *argv[])
                                goto end;
                        }
                } else if (strcmp(argv[1], "--listapp") == 0) {
-                       ret = __get_installed_app_list();
+                       ret = __get_installed_app_list(getuid());
                        if (ret == -1) {
                                printf("get installed app list failed\n");
                                goto end;
@@ -2228,7 +2264,7 @@ int main(int argc, char *argv[])
                        }
                        goto end;
                } else if (strcmp(argv[1], "--cmp-appcert") == 0) {
-                       ret = __compare_app_certinfo_from_db(argv[2], argv[3]);
+                       ret = __compare_app_certinfo_from_db(argv[2], argv[3], getuid());
                        if (ret == -1) {
                                printf("compare certinfo from db failed\n");
                                goto end;
@@ -2260,7 +2296,7 @@ int main(int argc, char *argv[])
        }
 
        if (strcmp(argv[1], "--pkg") == 0) {
-               ret = __get_pkg_info(argv[2]);
+               ret = __get_pkg_info(argv[2], getuid());
                if (ret == -1) {
                        printf("get pkg info failed\n");
                        goto end;
@@ -2272,31 +2308,31 @@ int main(int argc, char *argv[])
                        goto end;
                }
        } else if (strcmp(argv[1], "--list") == 0) {
-               ret = __get_app_list(argv[2]);
+               ret = __get_app_list(argv[2], getuid());
                if (ret == -1) {
                        printf("get app list failed\n");
                        goto end;
                }
        } else if (strcmp(argv[1], "--imd") == 0) {
-               ret = __insert_manifest_in_db(argv[2]);
+               ret = __insert_manifest_in_db(argv[2], getuid());
                if (ret == -1) {
                        printf("insert in db failed\n");
                        goto end;
                }
        } else if (strcmp(argv[1], "--fota") == 0) {
-               ret = __fota_insert_manifest_in_db(argv[2]);
+               ret = __fota_insert_manifest_in_db(argv[2], getuid());
                if (ret == -1) {
                        printf("insert in db failed\n");
                        goto end;
                }
        } else if (strcmp(argv[1], "--rmd") == 0) {
-               ret = __remove_manifest_from_db(argv[2]);
+               ret = __remove_manifest_from_db(argv[2], getuid());
                if (ret == -1) {
                        printf("remove from db failed\n");
                        goto end;
                }
        } else if (strcmp(argv[1], "--setdb") == 0) {
-               ret = __set_pkginfo_in_db(argv[2]);
+               ret = __set_pkginfo_in_db(argv[2], getuid());
                if (ret == -1) {
                        printf("set pkginfo in db failed\n");
                        goto end;
index 8f77297..d7d9b1c 100755 (executable)
@@ -219,7 +219,6 @@ static int initdb_change_perm(const char *db_file)
        return 0;
 }
 
-
 static int __is_authorized()
 {
        /* pkg_init db should be called by as root privilege. */
@@ -255,12 +254,12 @@ int main(int argc, char *argv[])
                _D("Some Packages in the Package Info DB.");
                return 0;
        }
+if (__is_authorized()) {
 
        ret = initdb_load_directory(OPT_MANIFEST_DIRECTORY);
        if (ret == -1) {
                _E("cannot load opt manifest directory.");
        }
-
        ret = initdb_load_directory(USR_MANIFEST_DIRECTORY);
        if (ret == -1) {
                _E("cannot load usr manifest directory.");