#include <getopt.h>
#include <pthread.h>
#include <stdio.h>
-#include <appcore-efl.h>
#include <pkgmgr_installer.h>
#include <security-server.h>
#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;
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);
i++;
}
- _d_msg(DEBUG_INFO, "%s\n", buffer);
- _d_msg(DEBUG_INFO,
+ _LOGD("%s\n", buffer);
+ _LOGD(
"\nrpm-backend usage\n rpm-backend -k <keyid> <command> <pkgid | pkg_path> [-q] \n\n");
- _d_msg(DEBUG_INFO, "<Commands> \n");
- _d_msg(DEBUG_INFO,
+ _LOGD("<Commands> \n");
+ _LOGD(
"\t -i <package file path> : install package file \n");
- _d_msg(DEBUG_INFO,
+ _LOGD(
"\t -k <keyid> : 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 <package name> : 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);
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;
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:
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;
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;
{
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);
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;
}
/* 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;
}
}
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)
if (data == NULL)
return 0;
- if (data->security_cookie)
+ if (data->security_cookie){
free(data->security_cookie);
+ data->security_cookie = NULL;
+ }
return 0;