char *backend_cmd;
char **argv;
char args[MAX_PKG_ARGS_LEN];
+ pkgmgrinfo_pkginfo_h pkginfo_h;
+ bool is_readonly;
+ bool is_global;
+ int ret;
int pid;
backend_cmd = job->backend_path;
if (backend_cmd == NULL)
return -1;
- snprintf(args, sizeof(args), "%s -k %s -u %d -A %s", backend_cmd,
- job->req_id, (int)job->target_uid, job->pkgid);
- argv = __generate_argv(args);
+ ret = pkgmgrinfo_pkginfo_get_usr_disabled_pkginfo(
+ job->pkgid, job->target_uid, &pkginfo_h);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get appinfo");
+ return -1;
+ }
+
+ ret = pkgmgrinfo_pkginfo_is_global(pkginfo_h, &is_global);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get global value");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+
+ if ((is_global && job->target_uid != GLOBAL_USER) ||
+ (!is_global && job->target_uid == GLOBAL_USER)) {
+ ERR("Invalid attempt to enable pkg");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+ ret = pkgmgrinfo_pkginfo_is_readonly(pkginfo_h, &is_readonly);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get readonly value");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+
+ snprintf(args, sizeof(args), "%s -k %s -u %d -A %s %s",
+ backend_cmd, job->req_id, (int)job->target_uid,
+ job->pkgid, (is_readonly) ? "--preload" : "");
+ argv = __generate_argv(args);
pid = __fork_and_exec_with_args(argv, APPFW_UID);
g_strfreev(argv);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
return pid;
}
char *backend_cmd;
char **argv;
char args[MAX_PKG_ARGS_LEN];
+ pkgmgrinfo_pkginfo_h pkginfo_h;
+ bool is_readonly;
+ bool is_global;
+ int ret;
int pid;
backend_cmd = job->backend_path;
if (backend_cmd == NULL)
return -1;
- snprintf(args, sizeof(args), "%s -k %s -u %d -D %s", backend_cmd,
- job->req_id, (int)job->target_uid, job->pkgid);
+ ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(
+ job->pkgid, job->target_uid, &pkginfo_h);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get appinfo");
+ return -1;
+ }
+
+ ret = pkgmgrinfo_pkginfo_is_global(pkginfo_h, &is_global);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get global value");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+
+ if ((is_global && job->target_uid != GLOBAL_USER) ||
+ (!is_global && job->target_uid == GLOBAL_USER)) {
+ ERR("Invalid attempt to disable pkg");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+
+ ret = pkgmgrinfo_pkginfo_is_readonly(pkginfo_h, &is_readonly);
+ if (ret != PMINFO_R_OK) {
+ ERR("Failed to get readonly value");
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
+ return -1;
+ }
+
+ snprintf(args, sizeof(args), "%s -k %s -u %d -D %s %s",
+ backend_cmd, job->req_id, (int)job->target_uid,
+ job->pkgid, (is_readonly) ? "--preload" : "");
argv = __generate_argv(args);
pid = __fork_and_exec_with_args(argv, APPFW_UID);
g_strfreev(argv);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_h);
return pid;
}
case REQUEST_TYPE_ENABLE_PKG:
__set_backend_busy(x);
ret = __process_enable_pkg(job);
- g_hash_table_insert(backend_info_table, (gpointer)ret,
- (gpointer)job);
+ if (ret == -1) {
+ _send_fail_signal(job);
+ __set_backend_free(x);
+ _free_backend_job(job);
+ } else {
+ g_hash_table_insert(backend_info_table, (gpointer)ret,
+ (gpointer)job);
+ }
break;
case REQUEST_TYPE_DISABLE_PKG:
__set_backend_busy(x);
ret = __process_disable_pkg(job);
- g_hash_table_insert(backend_info_table, (gpointer)ret,
- (gpointer)job);
+ if (ret == -1) {
+ _send_fail_signal(job);
+ __set_backend_free(x);
+ _free_backend_job(job);
+ } else {
+ g_hash_table_insert(backend_info_table, (gpointer)ret,
+ (gpointer)job);
+ }
break;
case REQUEST_TYPE_ENABLE_APP:
ret = __process_enable_app(job);