X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fbase%2Frpm-installer.git;a=blobdiff_plain;f=frontend%2Fsrc%2Frpm-cmdline.c;h=c6da09a49f9001444aef72e024b4da040c178a09;hp=794fd15f2fc324a5f9c1d1bc4455f3ff8bbf7807;hb=09011705882637cb333426945c689c3ba536da6f;hpb=fd34fdf3be9fe380559a11786820b0b86c868ae7 diff --git a/frontend/src/rpm-cmdline.c b/frontend/src/rpm-cmdline.c index 794fd15..c6da09a 100755 --- a/frontend/src/rpm-cmdline.c +++ b/frontend/src/rpm-cmdline.c @@ -25,13 +25,12 @@ #include #include #include -#include #include #include #include "rpm-frontend.h" #include "rpm-installer-util.h" #include "rpm-installer.h" -#include "rpm-homeview.h" +#include "coretpk-installer.h" #define _FIX_POP_UP_ extern struct appdata ad; @@ -40,6 +39,8 @@ extern pkgmgr_installer *pi; ri_frontend_data front_data; char scrolllabel[256]; int move_type; +#define BUF_SIZE 1024 +#define OTP_USR_APPS "/opt/usr/apps" static void __ri_show_usage(char **arg); static int __ri_process_request(ri_frontend_cmdline_arg *fdata); @@ -56,39 +57,68 @@ static void __ri_show_usage(char **arg) i++; } - _d_msg(DEBUG_INFO, "%s\n", buffer); - _d_msg(DEBUG_INFO, + _LOGD("%s\n", buffer); + _LOGD( "\nrpm-backend usage\n rpm-backend -k [-q] \n\n"); - _d_msg(DEBUG_INFO, " \n"); - _d_msg(DEBUG_INFO, + _LOGD(" \n"); + _LOGD( "\t -i : install package file \n"); - _d_msg(DEBUG_INFO, + _LOGD( "\t -k : key id file \n"); - _d_msg(DEBUG_INFO, + _LOGD( "\t -r : (recover). Must ignore specific package name or path \n"); - _d_msg(DEBUG_INFO, + _LOGD( "\t -d : delete a package with package name \n"); - _d_msg(DEBUG_INFO, + _LOGD( "\t -q : (quiet) run in background without any user interaction \n"); + _LOGD( + "\t -s : (smack) apply smack rule and set smack label\n"); +} + +int _ri_parse_hybrid(int argc, char **argv) +{ + int i = 0; + + if (argv[1] != NULL) { + if (!strcmp(argv[1], "-iv")) { + _LOGE("Hybrid Installation start\n"); + + for (i = 0; i < argc; i++) { + const char* arg_str = argv[i]; + if (arg_str) + _LOGE("argv[%d] = [%s]\n", i, arg_str); + } + + if (_coretpk_installer_request_hybrid(argv[1][1], argv[2], atoi(argv[4])) == 0) { + return RPM_INSTALLER_SUCCESS; + } else { + return RPM_INSTALLER_ERR_INTERNAL; + } + } else if (!strcmp(argv[1], "-uv")) { + _LOGE("Hybrid Uninstallation start\n"); + return RPM_INSTALLER_SUCCESS; + } + } + + return RPM_INSTALLER_ERR_WRONG_PARAM; } int _ri_parse_cmdline(int argc, char **argv, ri_frontend_cmdline_arg *data) { int req_cmd = INVALID_CMD; const char *pkgid = NULL; - int quiet = 0; const char *pkeyid = NULL; int ret = 0; int move_type = -1; pi = pkgmgr_installer_new(); if (!pi) { - _d_msg(DEBUG_ERR, + _LOGE( "Failure in creating the pkgmgr_installer object \n"); return RPM_INSTALLER_ERR_WRONG_PARAM; } ret = pkgmgr_installer_receive_request(pi, argc, argv); if (ret) { - _d_msg(DEBUG_ERR, "pkgmgr_installer_receive_request failed \n"); + _LOGE("pkgmgr_installer_receive_request failed \n"); return RPM_INSTALLER_ERR_WRONG_PARAM; } ret = pkgmgr_installer_get_request_type(pi); @@ -96,6 +126,9 @@ int _ri_parse_cmdline(int argc, char **argv, ri_frontend_cmdline_arg *data) case PKGMGR_REQ_INSTALL: req_cmd = INSTALL_CMD; break; + case PKGMGR_REQ_REINSTALL: + req_cmd = CORETPK_REINSTALL_CMD; + break; case PKGMGR_REQ_UNINSTALL: req_cmd = DELETE_CMD; break; @@ -108,6 +141,9 @@ int _ri_parse_cmdline(int argc, char **argv, ri_frontend_cmdline_arg *data) case PKGMGR_REQ_MOVE: req_cmd = MOVE_CMD; break; + case PKGMGR_REQ_SMACK: + req_cmd = SMACK_CMD; + break; case PKGMGR_REQ_PERM: goto PARSEERROR; case PKGMGR_REQ_INVALID: @@ -119,43 +155,54 @@ int _ri_parse_cmdline(int argc, char **argv, ri_frontend_cmdline_arg *data) if (req_cmd != RECOVER_CMD) { pkgid = pkgmgr_installer_get_request_info(pi); if (!pkgid) { - _d_msg(DEBUG_ERR, + _LOGE( "pkgmgr_installer_get_request_info failed \n"); return RPM_INSTALLER_ERR_WRONG_PARAM; } pkeyid = pkgmgr_installer_get_session_id(pi); if (!pkeyid) { - _d_msg(DEBUG_ERR, "pkgmgr_installer_get_session_id failed \n"); - return RPM_INSTALLER_ERR_WRONG_PARAM; - } - - quiet = pkgmgr_installer_is_quiet(pi); - if (quiet != 0 && quiet != 1) { - _d_msg(DEBUG_ERR, "pkgmgr_installer_is_quiet failed \n"); + _LOGE("pkgmgr_installer_get_session_id failed \n"); return RPM_INSTALLER_ERR_WRONG_PARAM; } - move_type = pkgmgr_installer_get_move_type(pi); } - if ((req_cmd < INSTALL_CMD) ||(req_cmd > MOVE_CMD)) { - _d_msg(DEBUG_ERR, "invalid command \n"); +//Logically dead code,the value of req_cmd never satisfies the condition +#if 0 + if ((req_cmd < INSTALL_CMD) ||(req_cmd > RPM_CMD_MAX)) { + _LOGE("invalid command \n"); goto PARSEERROR; } - +#endif data->req_cmd = req_cmd; data->pkgid = (char *)pkgid; - data->quiet = quiet; data->keyid = (char *)pkeyid; data->move_type = move_type; + data->clientid = (char *)pkgmgr_installer_get_caller_pkgid(pi); + return RPM_INSTALLER_SUCCESS; PARSEERROR: - _d_msg(DEBUG_ERR, "Error in parsing input parameter\n"); + _LOGE("Error in parsing input parameter\n"); __ri_show_usage(argv); return RPM_INSTALLER_ERR_WRONG_PARAM; } +static int __ri_is_core_tpk_app(char *pkgid) +{ + char pkgpath[BUF_SIZE] = {'\0'}; + + snprintf(pkgpath, BUF_SIZE, "%s/%s/tizen-manifest.xml", OTP_USR_APPS, pkgid); + + if (access(pkgpath, R_OK) == 0) { + _LOGE("This is a core tpk app."); + return 0; + } else { + _LOGE("This is not a core tpk app."); + return -1; + } +} + static int __ri_process_request(ri_frontend_cmdline_arg *data) { int ret = 0; @@ -165,44 +212,92 @@ static int __ri_process_request(ri_frontend_cmdline_arg *data) char *keyid = NULL; if (data->req_cmd != RECOVER_CMD) { pkgid = strdup(data->pkgid); - if (PM_UNLIKELY(pkgid == NULL)) { - _d_msg(DEBUG_ERR, "strdup failed\n"); - return RPM_INSTALLER_ERR_WRONG_PARAM; - } - keyid = strdup(data->keyid); - if (PM_UNLIKELY(keyid == NULL)) { - _d_msg(DEBUG_ERR, "strdup failed\n"); - free(pkgid); - return RPM_INSTALLER_ERR_WRONG_PARAM; - } + if (PM_UNLIKELY(pkgid == NULL)) { + _LOGE("strdup failed\n"); + return RPM_INSTALLER_ERR_WRONG_PARAM; + } + keyid = strdup(data->keyid); + if (PM_UNLIKELY(keyid == NULL)) { + _LOGE("strdup failed\n"); + free(pkgid); + pkgid = NULL; + return RPM_INSTALLER_ERR_WRONG_PARAM; + } + } + + if (pkgid == NULL) { + _LOGE("pkgid is null\n"); + return -1; } + switch (data->req_cmd) { case INSTALL_CMD: - _d_msg(DEBUG_INFO, "rpm-backend -i %s\n", pkgid); - ret = _rpm_backend_interface(keyid, pkgid, "install"); + _LOGD("rpm-backend -i %s\n", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "install", data->clientid); break; case DELETE_CMD: - _d_msg(DEBUG_INFO, "rpm-backend -d %s\n", pkgid); - ret = _rpm_backend_interface(keyid, pkgid, "remove"); + if (__ri_is_core_tpk_app(pkgid) == 0) { + _LOGD("------------------------------------------------"); + _LOGD("uninstallation: tpk, pkgid=[%s]", pkgid); + _LOGD("------------------------------------------------"); + ret = _coretpk_backend_interface("coretpk-uninstall", data); + } else { + _LOGD("uninstallation for rpm [%s]", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "remove", NULL); + } break; case CLEARDATA_CMD: - _d_msg(DEBUG_INFO, "rpm-backend -c %s\n", pkgid); - ret = _rpm_backend_interface(keyid, pkgid, "cleardata"); + _LOGD("rpm-backend -c %s\n", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "cleardata", NULL); break; case MOVE_CMD: - _d_msg(DEBUG_INFO, "rpm-backend -m %s -t %d\n", pkgid, data->move_type); - move_type = data->move_type; - ret = _rpm_backend_interface(keyid, pkgid, "move"); + if (__ri_is_core_tpk_app(pkgid) == 0) { + _LOGD("coretpk-move %s\n", pkgid); + ret = _coretpk_backend_interface("coretpk-move", data); + } else { + _LOGD("rpm-backend -m %s -t %d\n", pkgid, data->move_type); + move_type = data->move_type; + ret = _rpm_backend_interface(keyid, pkgid, "move", NULL); + } break; case RECOVER_CMD: - _d_msg(DEBUG_INFO, "rpm-backend -r \n"); - ret = _rpm_backend_interface(keyid, pkgid, "recover"); + _LOGD("rpm-backend -r \n"); + ret = _rpm_backend_interface(keyid, pkgid, "recover", NULL); + break; + case SMACK_CMD: + _LOGD("rpm-backend -s %s", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "smack", NULL); + break; + case EFLWGT_INSTALL_CMD: + _LOGD("eflwgt-install %s\n", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "eflwgt-install", data->clientid); + break; + case CORETPK_INSTALL_CMD: + _LOGD("------------------------------------------------"); + _LOGD("installation: tpk, arg=[%s]", pkgid); + _LOGD("------------------------------------------------"); + ret = _coretpk_backend_interface("coretpk-install", data); + break; + case CORETPK_REINSTALL_CMD: + _LOGD("coretpk-reinstall %s\n", pkgid); + ret = _coretpk_backend_interface("coretpk-reinstall", data); + break; + case CORETPK_DIRECTORY_INSTALL_CMD: + _LOGD("coretpk-directory_install %s\n", pkgid); + ret = _coretpk_backend_interface("coretpk-directory-install", data); + break; + case ENABLE_CMD: + _LOGD("rpm enable %s\n", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "rpm-enable", NULL); + break; + case DISABLE_CMD: + _LOGD("rpm disable %s\n", pkgid); + ret = _rpm_backend_interface(keyid, pkgid, "rpm-disable", NULL); break; default: - _d_msg(DEBUG_ERR, - "Error Never Come Here as Error is already checked\n"); - + _LOGE("Error Never Come Here as Error is already checked\n"); } + if (keyid) { free(keyid); keyid = NULL; @@ -219,22 +314,16 @@ void _ri_stat_cb(const char *pkgid, const char *key, const char *val) { if (NULL == pkgid || NULL == key || NULL == val) { - _d_msg(DEBUG_ERR, "Either pkgid/key/val is NULL\n"); + _LOGE("Either pkgid/key/val is NULL\n"); return; /*TODO: handle error. */ } - char *pkgid_modified = NULL; + char pkgid_modified[PATH_MAX] = {0}; char delims[] = "/"; char *result = NULL; char *pkgid_tmp = NULL; char *saveptr = NULL; - pkgid_modified = (char *)malloc(strlen(pkgid) + 1); - if (pkgid_modified == NULL) { - _d_msg(DEBUG_ERR, "pkgid_modified is NULL. Malloc failed\n"); - return; - } - memset(pkgid_modified, '\0', strlen(pkgid) + 1); memcpy(pkgid_modified, pkgid, strlen(pkgid)); result = strtok_r(pkgid_modified, delims, &saveptr); @@ -254,21 +343,21 @@ void _ri_stat_cb(const char *pkgid, const char *key, const char *val) switch (front_data.args->req_cmd) { case INSTALL_CMD: snprintf(requesttype, sizeof(requesttype), - _("Installation")); + "installation"); break; case DELETE_CMD: - snprintf(requesttype, sizeof(requesttype), _("Deletion")); + snprintf(requesttype, sizeof(requesttype), "deletion"); break; case CLEARDATA_CMD: snprintf(requesttype, sizeof(requesttype), - _("Clear Data")); + "clear data"); break; case MOVE_CMD: snprintf(requesttype, sizeof(requesttype), - _("Move")); + "move"); break; default: - snprintf(requesttype, sizeof(requesttype), _("Recovery")); + snprintf(requesttype, sizeof(requesttype), "recovery"); break; } @@ -276,17 +365,17 @@ void _ri_stat_cb(const char *pkgid, const char *key, const char *val) /* Error Happened */ snprintf(scrolllabel, sizeof(scrolllabel), "%s :: %s:: %s:: %s", requesttype, pkgid_tmp, - dgettext("sys_string", "IDS_COM_POP_ERROR"), + "error", front_data.error); - _d_msg(DEBUG_ERR, "%s\n", scrolllabel); + _LOGE("%s\n", scrolllabel); ret_val = _ri_string_to_error_no(front_data.error); - _d_msg(DEBUG_ERR, "%d\n", ret_val); + _LOGE("%d\n", ret_val); } else { snprintf(scrolllabel, sizeof(scrolllabel), " %s :: %s :: %s", requesttype, pkgid_tmp, - dgettext("sys_string", "IDS_COM_POP_SUCCESS")); - _d_msg(DEBUG_INFO, "%s\n", scrolllabel); + "success"); + _LOGD("%s\n", scrolllabel); ret_val = 0; } } @@ -294,49 +383,15 @@ void _ri_stat_cb(const char *pkgid, const char *key, const char *val) int _ri_cmdline_process(ri_frontend_data *data) { - char *cookie = NULL; - int cookie_size = 0; - int cookie_ret = 0; - int ret = 0; ri_frontend_cmdline_arg *fdata = data->args; - - cookie_size = security_server_get_cookie_size(); - /* If security server is down or some other - error occured, raise failure */ - if (0 >= cookie_size) { - /* TODO: raise error */ - _d_msg(DEBUG_ERR, - "security_server_get_cookie_size: Security server down \n"); - } else { - cookie = calloc(cookie_size, sizeof(char)); - cookie_ret = - security_server_request_cookie(cookie, cookie_size); - /* TODO: Check cookie_ret... - (See security-server.h to check return code) */ - } - - if (cookie != NULL) - _d_msg(DEBUG_INFO, "Got Cookie with size = %d\n", cookie_size); - - data->security_cookie = cookie; - + /*rpm-installer is invoked by pkgmgr-server hence server should do cookie validation*/ ret = __ri_process_request(fdata); if (ret != RPM_INSTALLER_SUCCESS) { - _d_msg(DEBUG_ERR, "__ri_process_request: Error\n"); - goto RETURN; + _LOGE("__ri_process_request: Error\n"); + return ret; } - return RPM_INSTALLER_SUCCESS; - - RETURN: - - if (data->security_cookie) { - free(data->security_cookie); - data->security_cookie = NULL; - } - - return ret; } int _ri_cmdline_destroy(ri_frontend_data *data) @@ -344,8 +399,10 @@ int _ri_cmdline_destroy(ri_frontend_data *data) if (data == NULL) return 0; - if (data->security_cookie) + if (data->security_cookie){ free(data->security_cookie); + data->security_cookie = NULL; + } return 0;