static int __process_enable_pkg(pm_dbus_msg *item)
{
- /* TODO */
- return 0;
+ char *backend_cmd;
+ char **argv;
+ char args[MAX_PKG_ARGS_LEN];
+ int pid;
+
+ backend_cmd = _get_backend_cmd(item->pkg_type);
+ if (backend_cmd == NULL)
+ return -1;
+
+ snprintf(args, sizeof(args), "%s -k %s -A %s", backend_cmd,
+ item->req_id, item->pkgid);
+ argv = __generate_argv(args);
+
+ pid = __fork_and_exec_with_args(argv, item->uid);
+
+ g_strfreev(argv);
+ free(backend_cmd);
+
+ return pid;
}
static int __process_disable_pkg(pm_dbus_msg *item)
{
- /* TODO */
- return 0;
+ char *backend_cmd;
+ char **argv;
+ char args[MAX_PKG_ARGS_LEN];
+ int pid;
+
+ backend_cmd = _get_backend_cmd(item->pkg_type);
+ if (backend_cmd == NULL)
+ return -1;
+
+ snprintf(args, sizeof(args), "%s -k %s -D %s", backend_cmd,
+ item->req_id, item->pkgid);
+ argv = __generate_argv(args);
+
+ pid = __fork_and_exec_with_args(argv, item->uid);
+
+ g_strfreev(argv);
+ free(backend_cmd);
+
+ return pid;
}
static int __process_enable_app(pm_dbus_msg *item)
uid_t target_uid = (uid_t)-1;
char *pkgtype = NULL;
char *pkgid = NULL;
+ char *reqkey = NULL;
g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
if (target_uid == (uid_t)-1 || pkgid == NULL) {
return -1;
}
- if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_ENABLE_PKG, pkgtype,
+ reqkey = __generate_reqkey(pkgid);
+ if (reqkey == NULL)
+ return -1;
+
+ if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_ENABLE_PKG, pkgtype,
pkgid, "")) {
g_dbus_method_invocation_return_value(invocation,
g_variant_new("(i)", PKGMGR_R_ESYSTEM));
+ free(reqkey);
return -1;
}
g_dbus_method_invocation_return_value(invocation,
g_variant_new("(i)", PKGMGR_R_OK));
+ free(reqkey);
return 0;
}
uid_t target_uid = (uid_t)-1;
char *pkgtype = NULL;
char *pkgid = NULL;
+ char *reqkey = NULL;
g_variant_get(parameters, "(u&s&s)", &target_uid, &pkgtype, &pkgid);
if (target_uid == (uid_t)-1 || pkgid == NULL) {
return -1;
}
- if (_pm_queue_push(target_uid, "", PKGMGR_REQUEST_TYPE_DISABLE_PKG, pkgtype,
+ reqkey = __generate_reqkey(pkgid);
+ if (reqkey == NULL)
+ return -1;
+
+ if (_pm_queue_push(target_uid, reqkey, PKGMGR_REQUEST_TYPE_DISABLE_PKG, pkgtype,
pkgid, "")) {
g_dbus_method_invocation_return_value(invocation,
g_variant_new("(i)", PKGMGR_R_ESYSTEM));
+ free(reqkey);
return -1;
}
g_dbus_method_invocation_return_value(invocation,
g_variant_new("(i)", PKGMGR_R_OK));
+ free(reqkey);
return 0;
}