From 3f73227a7c17638c8ed28441fdd09ce2aad8fcd7 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Wed, 4 Jan 2017 15:25:14 +0900 Subject: [PATCH] Support legacy image for backward-compatibility Refer to: https://review.tizen.org/gerrit/#/c/104823/ Change-Id: I79f4ae9e75e728f20e3d079b3d63f1ba1a8f3c6a Signed-off-by: jongmyeongko --- include/pkgmgr-server.h | 1 + org.tizen.pkgmgr.conf | 1 + src/pkgmgr-server.c | 28 ++++++++++++++++++++++++ src/request.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/include/pkgmgr-server.h b/include/pkgmgr-server.h index 0180fcb..7b2fe5a 100644 --- a/include/pkgmgr-server.h +++ b/include/pkgmgr-server.h @@ -81,6 +81,7 @@ enum request_type { REQUEST_TYPE_UNSET_RESTRICTION_MODE, REQUEST_TYPE_GET_RESTRICTION_MODE, REQUEST_TYPE_SET_APP_LABEL, + REQUEST_TYPE_MIGRATE_EXTERNAL_IMAGE, }; gboolean queue_job(void *data); diff --git a/org.tizen.pkgmgr.conf b/org.tizen.pkgmgr.conf index 7ad7a4b..306f578 100644 --- a/org.tizen.pkgmgr.conf +++ b/org.tizen.pkgmgr.conf @@ -43,5 +43,6 @@ + diff --git a/src/pkgmgr-server.c b/src/pkgmgr-server.c index e4653a2..b0cf052 100644 --- a/src/pkgmgr-server.c +++ b/src/pkgmgr-server.c @@ -1449,6 +1449,29 @@ static int __process_set_app_label(struct backend_job *job) return ret; } +static int __process_migrate_external_image(struct backend_job *job) +{ + char *backend_cmd; + char **argv; + char args[MAX_PKG_ARGS_LEN]; + int pid; + + backend_cmd = job->backend_path; + if (backend_cmd == NULL) + return -1; + + snprintf(args, sizeof(args), "%s -k %s --migrate-extimg %s -u %d %s", + backend_cmd, job->req_id, job->pkgid, + (int)job->target_uid, job->args); + + argv = __generate_argv(args); + + pid = __fork_and_exec_with_args(argv, APPFW_UID); + g_strfreev(argv); + + return pid; +} + static int __post_process(int ret, int x, struct backend_job *job) { if (ret < 0) { @@ -1622,6 +1645,11 @@ gboolean queue_job(void *data) ret = __process_set_app_label(job); _free_backend_job(job); break; + case REQUEST_TYPE_MIGRATE_EXTERNAL_IMAGE: + __set_backend_busy(x); + ret = __process_migrate_external_image(job); + __post_process(ret, x, job); + break; default: ret = -1; break; diff --git a/src/request.c b/src/request.c index 073be8e..8e3793e 100644 --- a/src/request.c +++ b/src/request.c @@ -175,6 +175,11 @@ static const char instropection_xml[] = " " " " " " + " " + " " + " " + " " + " " " " ""; static GDBusNodeInfo *instropection_data; @@ -1432,6 +1437,55 @@ static int __handle_request_set_app_label(uid_t uid, return 0; } +static int __handle_request_migrate_external_image(uid_t uid, + GDBusMethodInvocation *invocation, GVariant *parameters) +{ + uid_t target_uid = (uid_t)-1; + char *pkgid = NULL; + char *pkgtype; + char *reqkey; + + g_variant_get(parameters, "(us)", &target_uid, &pkgid); + if (target_uid == (uid_t)-1 || pkgid == NULL) { + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(i)", PKGMGR_R_ECOMM)); + return -1; + } + + pkgtype = _get_pkgtype_from_pkgid(pkgid, target_uid); + if (pkgtype == NULL) { + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(i)", PKGMGR_R_ENOPKG)); + return -1; + } + + reqkey = __generate_reqkey(pkgid); + if (reqkey == NULL) { + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(i)", PKGMGR_R_ENOMEM)); + free(pkgtype); + return -1; + } + + if (_push_queue(target_uid, uid, reqkey, + REQUEST_TYPE_MIGRATE_EXTERNAL_IMAGE, + pkgtype, pkgid, NULL)) { + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(i)", PKGMGR_R_ESYSTEM)); + free(reqkey); + free(pkgtype); + return -1; + } + + g_dbus_method_invocation_return_value(invocation, + g_variant_new("(i)", PKGMGR_R_OK)); + + free(reqkey); + free(pkgtype); + + return 0; +} + static uid_t __get_caller_uid(GDBusConnection *connection, const char *name) { GError *err = NULL; @@ -1535,6 +1589,9 @@ static void __handle_method_call(GDBusConnection *connection, parameters); else if (g_strcmp0(method_name, "set_app_label") == 0) ret = __handle_request_set_app_label(uid, invocation, parameters); + else if (g_strcmp0(method_name, "migrate_external_image") == 0) + ret = __handle_request_migrate_external_image(uid, invocation, + parameters); else ret = -1; -- 2.7.4