backend_busy = backend_busy & ~(1<<position);
}
-static void __send_app_signal(uid_t uid, const char *req_id,
- const char *pkgid, const char *appid,
- const char *key, const char *val, int req_type)
-{
- pkgmgr_installer *pi;
-
- pi = pkgmgr_installer_new();
- if (!pi) {
- DBG("Failure in creating the pkgmgr_installer object");
- return;
- }
-
- if (pkgmgr_installer_set_uid(pi, uid))
- goto catch;
-
- switch (req_type) {
- case PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID:
- case PKGMGR_REQUEST_TYPE_ENABLE_APP:
- if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_ENABLE_APP))
- goto catch;
- break;
- case PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID:
- case PKGMGR_REQUEST_TYPE_DISABLE_APP:
- if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_DISABLE_APP))
- goto catch;
- break;
- case PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN:
- if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN))
- goto catch;
- break;
- case PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN:
- if (pkgmgr_installer_set_request_type(pi, PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN))
- goto catch;
- break;
- default:
- DBG("Unsupported req_type[%d]", req_type);
- goto catch;
- }
-
- if (pkgmgr_installer_set_session_id(pi, req_id))
- goto catch;
- pkgmgr_installer_send_app_signal(pi, "app", pkgid, appid, key, val);
-
-catch:
- pkgmgr_installer_free(pi);
-
- return;
-}
-
-static void __send_fail_signal(backend_info *info)
-{
- int req_type;
- pkgmgr_installer *pi;
- pi = pkgmgr_installer_new();
- if (!pi) {
- ERR("Failure in creating the pkgmgr_installer object");
- return;
- }
- pkgmgr_installer_set_session_id(pi, info->req_id);
- switch (info->req_type) {
- case PKGMGR_REQUEST_TYPE_INSTALL:
- case PKGMGR_REQUEST_TYPE_MOUNT_INSTALL:
- case PKGMGR_REQUEST_TYPE_REINSTALL:
- req_type = PKGMGR_REQ_INSTALL;
- break;
- case PKGMGR_REQUEST_TYPE_UNINSTALL:
- req_type = PKGMGR_REQ_UNINSTALL;
- break;
- case PKGMGR_REQUEST_TYPE_MOVE:
- req_type = PKGMGR_REQ_MOVE;
- break;
- case PKGMGR_REQUEST_TYPE_GETSIZE:
- req_type = PKGMGR_REQ_GETSIZE;
- break;
- default:
- req_type = PKGMGR_REQ_INVALID;
- break;
- }
- pkgmgr_installer_set_request_type(pi, req_type);
- pkgmgr_installer_send_signal(pi, info->pkgtype, info->pkgid, "end", "fail");
- pkgmgr_installer_free(pi);
- return;
-}
-
static gboolean pipe_io_handler(GIOChannel *io, GIOCondition cond, gpointer data)
{
int x;
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include <systemd/sd-login.h>
+
+#include <pkgmgr_installer.h>
+#include <tzplatform_config.h>
+
+#include "pkgmgr-server.h"
+
+#define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
+
+static int __get_uid_list(uid_t target_uid, uid_t **uids)
+{
+ int n;
+
+ if (target_uid != GLOBAL_USER) {
+ *uids = malloc(sizeof(uid_t));
+ if (*uids == NULL) {
+ ERR("out of memory");
+ return 0;
+ }
+ (*uids)[0] = target_uid;
+ n = 1;
+ } else {
+ n = sd_get_uids(uids);
+ if (n < 0) {
+ ERR("cannot get login user list");
+ return 0;
+ }
+ }
+
+ return n;
+}
+
+static void __free_uid_list(uid_t *uids)
+{
+ free(uids);
+}
+
+void __send_app_signal(uid_t uid, const char *req_id,
+ const char *pkgid, const char *appid,
+ const char *key, const char *val, int req_type)
+{
+ pkgmgr_installer *pi;
+ uid_t *uids = NULL;
+ int n;
+ int i;
+
+ pi = pkgmgr_installer_new();
+ if (!pi) {
+ DBG("Failure in creating the pkgmgr_installer object");
+ return;
+ }
+
+ if (pkgmgr_installer_set_uid(pi, uid))
+ goto catch;
+
+ switch (req_type) {
+ case PKGMGR_REQUEST_TYPE_ENABLE_GLOBAL_APP_FOR_UID:
+ case PKGMGR_REQUEST_TYPE_ENABLE_APP:
+ if (pkgmgr_installer_set_request_type(pi,
+ PKGMGR_REQ_ENABLE_APP))
+ goto catch;
+ break;
+ case PKGMGR_REQUEST_TYPE_DISABLE_GLOBAL_APP_FOR_UID:
+ case PKGMGR_REQUEST_TYPE_DISABLE_APP:
+ if (pkgmgr_installer_set_request_type(pi,
+ PKGMGR_REQ_DISABLE_APP))
+ goto catch;
+ break;
+ case PKGMGR_REQUEST_TYPE_ENABLE_APP_SPLASH_SCREEN:
+ if (pkgmgr_installer_set_request_type(pi,
+ PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN))
+ goto catch;
+ break;
+ case PKGMGR_REQUEST_TYPE_DISABLE_APP_SPLASH_SCREEN:
+ if (pkgmgr_installer_set_request_type(pi,
+ PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN))
+ goto catch;
+ break;
+ default:
+ DBG("Unsupported req_type[%d]", req_type);
+ goto catch;
+ }
+
+ if (pkgmgr_installer_set_session_id(pi, req_id))
+ goto catch;
+ pkgmgr_installer_send_app_signal(pi, "app", pkgid, appid, key, val);
+ n = __get_uid_list(uid, &uids);
+ for (i = 0; i < n; i++)
+ pkgmgr_installer_send_app_signal_for_uid(pi, uids[i], "app",
+ pkgid, appid, key, val);
+
+catch:
+ __free_uid_list(uids);
+ pkgmgr_installer_free(pi);
+
+ return;
+}
+
+void __send_fail_signal(backend_info *info)
+{
+ int req_type;
+ pkgmgr_installer *pi;
+ uid_t *uids = NULL;
+ int n;
+ int i;
+
+ pi = pkgmgr_installer_new();
+ if (!pi) {
+ ERR("Failure in creating the pkgmgr_installer object");
+ return;
+ }
+ pkgmgr_installer_set_session_id(pi, info->req_id);
+ switch (info->req_type) {
+ case PKGMGR_REQUEST_TYPE_INSTALL:
+ case PKGMGR_REQUEST_TYPE_MOUNT_INSTALL:
+ case PKGMGR_REQUEST_TYPE_REINSTALL:
+ req_type = PKGMGR_REQ_INSTALL;
+ break;
+ case PKGMGR_REQUEST_TYPE_UNINSTALL:
+ req_type = PKGMGR_REQ_UNINSTALL;
+ break;
+ case PKGMGR_REQUEST_TYPE_MOVE:
+ req_type = PKGMGR_REQ_MOVE;
+ break;
+ case PKGMGR_REQUEST_TYPE_GETSIZE:
+ req_type = PKGMGR_REQ_GETSIZE;
+ break;
+ default:
+ req_type = PKGMGR_REQ_INVALID;
+ break;
+ }
+ pkgmgr_installer_set_request_type(pi, req_type);
+ pkgmgr_installer_send_signal(pi, info->pkgtype, info->pkgid,
+ "end", "fail");
+ n = __get_uid_list(info->uid, &uids);
+ for (i = 0; i < n; i++)
+ pkgmgr_installer_send_signal_for_uid(pi, uids[i],
+ info->pkgtype, info->pkgid, "end", "fail");
+
+ __free_uid_list(uids);
+ pkgmgr_installer_free(pi);
+ return;
+}
+
+