From a6682303fab5c118ec82dc80c9a96643342a2263 Mon Sep 17 00:00:00 2001 From: Baptiste DURAND Date: Fri, 29 Aug 2014 15:52:14 +0200 Subject: [PATCH] Fix TC-320 Fix listing function in pkgcmd tool Add -G option to allow installation/uninstallation... for whole system Change-Id: I44b6531d5a1b0de43ffa2b9c8540e52214a891b5 Signed-off-by: Baptiste DURAND Signed-off-by: Sabera Djelti (sdi2) --- client/src/pkgmgr.c | 1187 ++++++--------------------------------------------- tool/pkg_cmd.c | 120 +++--- 2 files changed, 206 insertions(+), 1101 deletions(-) diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index 87c0bfd..df69593 100755 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -1123,10 +1123,11 @@ API int pkgmgr_client_free(pkgmgr_client *pc) return PKGMGR_R_ERROR; } -API int pkgmgr_client_install(pkgmgr_client * pc, const char *pkg_type, + +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) + pkgmgr_handler event_cb, void *data, uid_t uid) { char *pkgtype = NULL; char *installer_path = NULL; @@ -1142,7 +1143,7 @@ API int pkgmgr_client_install(pkgmgr_client * pc, const char *pkg_type, char *cookie = NULL; char *caller_pkgid = NULL; - caller_pkgid = __get_caller_pkgid(GLOBAL_USER); + caller_pkgid = __get_caller_pkgid(uid); if (caller_pkgid == NULL) _LOGE("caller dont have pkgid..\n"); @@ -1261,143 +1262,18 @@ catch: 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"); - - /* 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); +API 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) +{ + - return ret; + return pkgmgr_client_usr_install(pc, pkg_type, + descriptor_path, pkg_path, optional_file, mode, event_cb,data, GLOBAL_USER); } API int pkgmgr_client_reinstall(pkgmgr_client * pc, const char *pkg_type, const char *pkgid, @@ -1517,6 +1393,12 @@ API int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type, const char *pkgid, pkgmgr_mode mode, pkgmgr_handler event_cb, void *data) { + return pkgmgr_client_usr_uninstall(pc, pkg_type,pkgid, mode, event_cb, data, GLOBAL_USER); +} +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) +{ char *pkgtype; char *installer_path; char *req_key; @@ -1532,7 +1414,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(GLOBAL_USER); + caller_pkgid = __get_caller_pkgid(uid); if (caller_pkgid == NULL) _LOGE("caller dont have pkgid..\n"); @@ -1554,15 +1436,24 @@ API int pkgmgr_client_uninstall(pkgmgr_client *pc, const char *pkg_type, 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"); + if (uid != GLOBAL_USER) { + /*check running app , terminate app if it is running*/ + ret = pkgmgr_appinfo_get_usr_list(handle, PM_UI_APP, __app_list_cb, NULL, uid); + 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 running app , terminate app if it is running*/ + ret = pkgmgr_appinfo_get_usr_list(handle, PM_SVC_APP, __app_list_cb, NULL, uid); + tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_SVC_APP fail"); + } else { + /*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 type */ + /*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"); @@ -1651,328 +1542,64 @@ catch: PKGMGR_END();\ return ret; } -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) + +API int pkgmgr_client_move(pkgmgr_client *pc, const char *pkg_type, + const char *pkgid, pkgmgr_move_type move_type, pkgmgr_mode mode) { - char *pkgtype; - char *installer_path; - char *req_key; - int req_id; + return pkgmgr_client_usr_move( pc,pkg_type, pkgid, move_type, mode, GLOBAL_USER); +} +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 = -1; + int ret = 0; + int req_id = 0; char *cookie = NULL; - bool removable = false; - char *caller_pkgid = NULL; - - caller_pkgid = __get_caller_pkgid(uid); - if (caller_pkgid == NULL) - _LOGE("caller dont have pkgid..\n"); + char buf[128] = {'\0'}; /* Check for NULL value of pc */ - retvm_if(pc == NULL, PKGMGR_R_EINVAL, "package manager client handle is NULL\n"); - + 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; - /* 0. check the pc type */ - retv_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL); - - /* 1. check argument */ - retv_if(pkgid == NULL, PKGMGR_R_EINVAL); + /*check argument */ + if (pkgid == NULL) + return PKGMGR_R_EINVAL; - pkgmgr_pkginfo_h handle; - ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle); + if (pkg_type == NULL) { + pkgtype = _get_pkg_type_from_desktop_file(pkgid, uid); + if (pkgtype == NULL) + return PKGMGR_R_EINVAL; + } else + pkgtype = pkg_type; - /*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); + if (strlen(pkgid) >= PKG_STRING_LEN_MAX) + return PKGMGR_R_EINVAL; - if (uid != GLOBAL_USER) { - /*check running app , terminate app if it is running*/ - ret = pkgmgr_appinfo_get_usr_list(handle, PM_UI_APP, __app_list_cb, NULL, uid); - tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_UI_APP fail"); + if ((move_type < PM_MOVE_TO_INTERNAL) || (move_type > PM_MOVE_TO_SDCARD)) + return PKGMGR_R_EINVAL; - /*check running app , terminate app if it is running*/ - ret = pkgmgr_appinfo_get_usr_list(handle, PM_SVC_APP, __app_list_cb, NULL, uid); - tryvm_if(ret < 0, ret = PKGMGR_R_EINVAL, "pkgmgr_appinfo_get_list : PM_SVC_APP fail"); - } else { - /*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"); + /* get installer path using pkg_path */ + installer_path = _get_backend_path_with_type(pkgtype); + if (installer_path == NULL) + return PKGMGR_R_EINVAL; - /*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); - 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 */ - - /* 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("-d"); - /* argv[4] */ - argv[argcnt++] = strdup(pkgid); - 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"); - - /*** 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, 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 req_key */ + req_key = __get_req_key(pkgid); + req_id = _get_request_id(); /* generate argv */ snprintf(buf, 128, "%d", move_type); @@ -2008,138 +1635,8 @@ API int pkgmgr_client_usr_move(pkgmgr_client *pc, const char *pkg_type, 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_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"); - + return PKGMGR_R_ERROR; + } strncpy(args, argv[0], len - 1); for (i = 1; i < argcnt; i++) { @@ -2149,30 +1646,36 @@ API int pkgmgr_client_move_pkg(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); - tryvm_if(ret < 0, ret = PKGMGR_R_ECOMM, "calloc failed"); + 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 = req_id; + for (i = 0; i < argcnt; i++) + free(argv[i]); + + free(args); + return PKGMGR_R_ECOMM; + } -catch: for (i = 0; i < argcnt; i++) free(argv[i]); - if(args) + if (args) free(args); - if (cookie) - free(cookie); - pkgmgr_pkginfo_destroy_pkginfo(handle); - PKGMGR_END();\ - return ret; + 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) +{ + return pkgmgr_client_move_usr_pkg(pc, pkg_type, pkgid, GLOBAL_USER, move_type, mode, event_cb, data); } API int pkgmgr_client_move_usr_pkg(pkgmgr_client *pc, const char *pkg_type, @@ -2321,41 +1824,7 @@ catch: API int pkgmgr_client_activate(pkgmgr_client * pc, const char *pkg_type, const char *pkgid) { - 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, 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; + return pkgmgr_client_usr_activate(pc, pkg_type, pkgid, GLOBAL_USER); } API int pkgmgr_client_usr_activate(pkgmgr_client * pc, const char *pkg_type, @@ -2401,42 +1870,7 @@ catch: API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type, const char *pkgid) { - 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, 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; + return pkgmgr_client_usr_deactivate(pc, pkg_type, pkgid, GLOBAL_USER); } API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, @@ -2482,38 +1916,7 @@ catch: API int pkgmgr_client_activate_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"); - - /* 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; + return pkgmgr_client_usr_activate_app(pc,appid, GLOBAL_USER); } API int pkgmgr_client_usr_activate_app(pkgmgr_client * pc, const char *appid, uid_t uid) @@ -2554,83 +1957,7 @@ catch: API int pkgmgr_client_activate_appv(pkgmgr_client * pc, const char *appid, char *const argv[]) { - 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, 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; + return pkgmgr_client_usr_activate_appv(pc, appid, argv, GLOBAL_USER); } API int pkgmgr_client_usr_activate_appv(pkgmgr_client * pc, const char *appid, char *const argv[], uid_t uid) @@ -2683,74 +2010,43 @@ API int pkgmgr_client_usr_activate_appv(pkgmgr_client * pc, const char *appid, c 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_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 "); + argsr = (char *)calloc(strlen("1 APP")+2+len, sizeof(char)); + tryvm_if(argsr == NULL, ret = PKGMGR_R_ERROR, "calloc failed"); - pkgtype = _get_pkg_type_from_desktop_file(appid, GLOBAL_USER); - retvm_if(pkgtype == NULL, PKGMGR_R_EINVAL, "pkgtype is NULL"); + strncpy(argsr, "1 APP", strlen("1 APP")); + if (argcnt) { + strncat(argsr, " ", strlen(" ")); + strncat(argsr, args, strlen(args)); + } - /* 2. generate req_key */ - req_key = __get_req_key(appid); - retvm_if(req_key == NULL, PKGMGR_R_EINVAL, "req_key is NULL"); + _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, "0 APP", cookie, 1); + 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) +{ + return pkgmgr_client_usr_deactivate_app(pc, appid, GLOBAL_USER); +} + API int pkgmgr_client_usr_deactivate_app(pkgmgr_client *pc, const char *appid, uid_t uid) { const char *pkgtype; @@ -2790,115 +2086,7 @@ catch: API int pkgmgr_client_clear_user_data(pkgmgr_client *pc, const char *pkg_type, const char *appid, pkgmgr_mode mode) { - 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, 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; + return pkgmgr_client_usr_clear_user_data(pc, pkg_type, appid,mode, GLOBAL_USER); } API int pkgmgr_client_usr_clear_user_data(pkgmgr_client *pc, const char *pkg_type, const char *appid, pkgmgr_mode mode, uid_t uid) @@ -3143,65 +2331,7 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type, pkgmgr_client * pc, const char *pkg_type, const char *pkgid, 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, 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; + return pkgmgr_client_usr_request_service(service_type, service_mode, pc, pkg_type, pkgid, GLOBAL_USER, custom_info, event_cb, data); } API int pkgmgr_client_usr_request_service(pkgmgr_request_service_type service_type, int service_mode, @@ -3429,55 +2559,7 @@ API int pkgmgr_get_pkg_list(pkgmgr_iter_fn iter_fn, void *data, uid_t uid) API pkgmgr_info *pkgmgr_info_new(const char *pkg_type, const char *pkgid) { - 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, 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; + return pkgmgr_info_usr_new(pkg_type, pkgid, GLOBAL_USER); } API pkgmgr_info *pkgmgr_info_usr_new(const char *pkg_type, const char *pkgid, uid_t uid) { @@ -3621,19 +2703,24 @@ API int pkgmgr_pkginfo_get_usr_list(pkgmgr_info_pkg_list_cb pkg_list_cb, void *u return ret; } -API int pkgmgr_pkginfo_get_pkginfo(const char *pkgid, pkgmgr_pkginfo_h *handle) + +API int pkgmgr_pkginfo_get_usr_pkginfo(const char *pkgid, uid_t uid, pkgmgr_pkginfo_h *handle) { int ret = 0; - ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, handle); + ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, handle); return ret; } -API int pkgmgr_pkginfo_get_usr_pkginfo(const char *pkgid, uid_t uid, pkgmgr_pkginfo_h *handle) + + +API int pkgmgr_pkginfo_get_pkginfo(const char *pkgid, pkgmgr_pkginfo_h *handle) { int ret = 0; - ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, handle); + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, handle); return ret; } + + API int pkgmgr_pkginfo_get_pkgname(pkgmgr_pkginfo_h handle, char **pkg_name) { int ret = 0; diff --git a/tool/pkg_cmd.c b/tool/pkg_cmd.c index 08fbd1e..ea80e4f 100755 --- a/tool/pkg_cmd.c +++ b/tool/pkg_cmd.c @@ -58,7 +58,7 @@ static int __return_cb(int req_id, const char *pkg_type, const char *pkgid, static int __convert_to_absolute_path(char *path); /* Supported options */ -const char *short_options = "iurmcgCkaADL:lsd:p:t:n:T:S:qh"; +const char *short_options = "iurmcgCkaADL:lsd:p:t:n:T:S:Gqh"; const struct option long_options[] = { {"install", 0, NULL, 'i'}, {"uninstall", 0, NULL, 'u'}, @@ -81,6 +81,7 @@ const struct option long_options[] = { {"move-type", 1, NULL, 'T'}, {"getsize-type", 1, NULL, 'T'}, {"csc", 1, NULL, 'S'}, + {"global", 0, NULL, 'G'}, {"quiet", 0, NULL, 'q'}, {"help", 0, NULL, 'h'}, {0, 0, 0, 0} /* sentinel */ @@ -113,6 +114,7 @@ struct pm_tool_args_t { char des_path[PKG_NAME_STRING_LEN_MAX]; char label[PKG_NAME_STRING_LEN_MAX]; int quiet; + int global; int type; int result; }; @@ -268,34 +270,18 @@ static int __convert_to_absolute_path(char *path) static int __is_app_installed(char *pkgid, uid_t uid) { -#if 0 - ail_appinfo_h handle; - ail_error_e ret; - char *str = NULL; + pkgmgr_pkginfo_h handle; + int ret; if (uid != GLOBAL_USER) - ret = ail_package_get_usr_appinfo(pkgid, &handle, uid); + ret = pkgmgr_pkginfo_get_usr_pkginfo(pkgid, uid, &handle); else - ret = ail_package_get_appinfo(pkgid, &handle); - if (ret != AIL_ERROR_OK) { - return -1; - } - ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &str); - if (ret != AIL_ERROR_OK) { - return -1; - } - ret = ail_package_destroy_appinfo(handle); - if (ret != AIL_ERROR_OK) { - return -1; - } -//#else - pkgmgr_pkginfo_h handle; - int ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle); + ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle); + if(ret < 0) { printf("package is not in pkgmgr_info DB\n"); return -1; } else pkgmgr_pkginfo_destroy_pkginfo(handle); -#endif return 0; } @@ -310,7 +296,7 @@ static void __print_usage() printf("-m, --move move package\n"); printf("-g, --getsize get size of given package\n"); printf("-T, --getsize-type get type [0 : total size /1: data size]\n"); - printf("-l, --list display list of installed packages\n"); + printf("-l, --list display list of installed packages available for the current user [i.e. User's specific Apps and Global Apps] \n"); printf("-s, --show show detail package info\n"); printf("-a, --app-path show app installation path\n"); printf("-C, --check check if applications belonging to a package are running or not\n"); @@ -321,12 +307,13 @@ static void __print_usage() printf("-t, --package-type provide package type\n"); printf("-T, --move-type provide move type [0 : move to internal /1: move to external]\n"); printf("-q, --quiet quiet mode operation\n"); - printf("-h, --help print this help\n\n"); + printf("-G, --global Global Mode [Warning user should be privilegied to use this mode] \n"); + printf("-h, --help . print this help\n\n"); printf("Usage: pkgcmd [options] (--quiet)\n"); - printf("pkgcmd -i -t (-d ) -p (-q)\n"); - printf("pkgcmd -u -n (-q)\n"); - printf("pkgcmd -r -t -n \n"); + printf("pkgcmd -i -t (-d ) -p (-G) (-q)\n"); + printf("pkgcmd -u -n (-G) (-q)\n"); + printf("pkgcmd -r -t -n (-G) \n"); printf("pkgcmd -l (-t ) \n"); printf("pkgcmd -s -t -p (-q)\n"); printf("pkgcmd -s -t -n (-q)\n"); @@ -599,6 +586,7 @@ static int __process_request(uid_t uid) else mode = PM_QUIET; +//if global ret = __is_app_installed(data.pkgid, uid); if (ret == -1) { printf("package is not installed\n"); @@ -893,14 +881,19 @@ static int __process_request(uid_t uid) case LIST_REQ: if (data.pkg_type[0] == '\0') { - if (uid != GLOBAL_USER) + ret = 0; + if (uid != GLOBAL_USER) { + printf(" = USER APPS =\n"); ret = pkgmgr_pkginfo_get_usr_list(__pkgmgr_list_cb, NULL, uid); - else - ret = pkgmgr_pkginfo_get_list(__pkgmgr_list_cb, NULL); - if (ret == -1) { - printf("Failed to get package list\n"); - break; + if (ret == -1) { + printf("Failed to get usr package list\n"); + break; + } } + printf(" = SYSTEM APPS =\n"); + ret = pkgmgr_pkginfo_get_list(__pkgmgr_list_cb, NULL); + if (ret == -1) + printf("Failed to get package list\n"); break; } else { pkgmgrinfo_pkginfo_filter_h handle; @@ -915,35 +908,54 @@ static int __process_request(uid_t uid) pkgmgrinfo_pkginfo_filter_destroy(handle); break; } - ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, __pkgmgr_list_cb, NULL); - if (ret == -1) { - printf("Failed to get package filter list\n"); - pkgmgrinfo_pkginfo_filter_destroy(handle); + if (uid != GLOBAL_USER) { + printf(" = USER APPS =\n"); + if (pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(handle, __pkgmgr_list_cb, NULL,uid) != PMINFO_R_OK) { + printf("Failed to get package filter list\n"); + pkgmgrinfo_pkginfo_filter_destroy(handle); break; + } } + printf(" = SYSTEM APPS =\n"); + ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, __pkgmgr_list_cb, NULL); + if (ret != PMINFO_R_OK) + printf("Failed to get package filter list\n"); + pkgmgrinfo_pkginfo_filter_destroy(handle); break; } case SHOW_REQ: if (data.pkgid[0] != '\0') { - pkgmgr_info *pkg_info; - if(uid != GLOBAL_USER) - { + pkgmgr_info *pkg_info = NULL; + pkgmgr_info *pkg_info_GLobal = NULL; + + 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 in USER Apps, try in SYSTEM Apps\n"); + ret = -1; + } else { + printf("USER APPS \n"); + __print_pkg_info(pkg_info); + ret = pkgmgr_info_free(pkg_info); + break; + } } - if (pkg_info == NULL) { + pkg_info_GLobal = + pkgmgr_info_new(data.pkg_type, data.pkgid); + if ( pkg_info_GLobal == NULL ) { printf("Failed to get pkginfo handle\n"); ret = -1; break; } - __print_pkg_info(pkg_info); - ret = pkgmgr_info_free(pkg_info); + + printf("GLOBAL APPS \n"); + __print_pkg_info(pkg_info_GLobal); + if(pkg_info_GLobal) + ret = pkgmgr_info_free(pkg_info_GLobal); + break; } if (data.pkg_path[0] != '\0') { @@ -1049,9 +1061,6 @@ int main(int argc, char *argv[]) long endtime; struct timeval tv; - if (!__is_authorized()) { - printf("You are not an authorized user!\n"); - } if (argc == 1) __print_usage(); @@ -1066,6 +1075,7 @@ int main(int argc, char *argv[]) memset(data.pkg_type, '\0', PKG_TYPE_STRING_LEN_MAX); memset(data.label, '\0', PKG_TYPE_STRING_LEN_MAX); data.quiet = 0; + data.global = 0; //By default pkg_cmd will manage for the current user data.result = 0; data.type = -1; while (1) { @@ -1074,6 +1084,10 @@ int main(int argc, char *argv[]) if (c == -1) break; /* Parse end */ switch (c) { + case 'G': /* install */ + data.global = 1; + break; + case 'i': /* install */ data.request = INSTALL_REQ; break; @@ -1195,7 +1209,11 @@ int main(int argc, char *argv[]) } } - ret = __process_request(getuid()); + uid_t uid = getuid(); + if(data.global == 1) { + uid = GLOBAL_USER; + } + ret = __process_request(uid); if ((ret == -1) && (data.result != 0)) data.result = PKGCMD_ERR_ARGUMENT_INVALID; -- 2.7.4