4 #include <security-server.h>
8 #include "delegator_config.h"
9 #include "delegator_client_gdbus_generated.h"
15 #define LOG_TAG "DELEGATOR_SERVER"
18 GDBusConnection *context_connection = NULL;
19 static int result = -1;
21 static int __get_caller_pid(const char *name)
27 ret = g_dbus_connection_call_sync (context_connection,
28 "org.freedesktop.DBus",
29 "/org/freedesktop/DBus",
30 "org.freedesktop.DBus",
31 "GetConnectionUnixProcessID",
32 g_variant_new ("(s)", name),
34 G_DBUS_CALL_FLAGS_NONE,
38 g_variant_get (ret, "(u)", &pid);
39 g_variant_unref (ret);
44 static gboolean on_handle_launch(OrgTizenAulDelegator *object,
45 GDBusMethodInvocation *invocation, const gchar *arg_container,
46 const gchar *arg_bundle)
48 SECURE_LOGD("delegator server on_handle_launch(%s)", arg_container);
55 const char *name = g_dbus_method_invocation_get_sender(invocation);
57 pid = __get_caller_pid(name);
59 ret = security_server_check_privilege_by_pid(pid, "aul::jump", "x");
60 if (ret == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
61 SECURE_LOGE("delegator launch request has been denied by smack");
62 org_tizen_aul_delegator_complete_launch(object, invocation,
63 AUL_SVC_RET_EREJECTED);
67 ctx = vsm_create_context();
70 dom = vsm_lookup_zone_by_name(ctx, arg_container);
73 bundle *b = bundle_decode((const bundle_raw *)arg_bundle, strlen(arg_bundle));
74 bundle_get_str(b, AUL_SVC_K_FOCUS_ZONE, &focus);
75 if (focus == NULL || strcmp(focus, "true") == 0)
76 vsm_set_foreground(dom);
77 SECURE_LOGD("delegator server domain was changed");
79 char *old_zone = NULL;
81 aul_set_zone(arg_container, &old_zone);
82 result = aul_svc_run_service(b, 0, NULL, NULL);
86 SECURE_LOGD("delegator launch result = %d", result);
87 org_tizen_aul_delegator_complete_launch(object, invocation, result);
88 vsm_cleanup_context(ctx);
92 org_tizen_aul_delegator_complete_launch(object, invocation,
94 vsm_cleanup_context(ctx);
100 static void on_name_acquired(GDBusConnection *connection, const gchar *name,
103 SECURE_LOGD("delegator server on_name_acquired ++");
105 OrgTizenAulDelegator *skeleton;
107 skeleton = org_tizen_aul_delegator_skeleton_new();
108 g_signal_connect(skeleton, "handle-launch", G_CALLBACK(on_handle_launch),
110 g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(skeleton),
112 DELEGATOR_NODE, NULL);
113 context_connection = connection;
114 SECURE_LOGD("delegator server on_name_acquired -- ");
117 int main(int argc, char *argv[])
119 gMainLoop = g_main_loop_new(NULL, FALSE);
121 SECURE_LOGE("delegator server g_main_loop_new failed\n");
125 guint id = g_bus_own_name(G_BUS_TYPE_SYSTEM, DELEGATOR_INTERFACE,
126 G_BUS_NAME_OWNER_FLAGS_NONE, NULL, on_name_acquired, NULL, NULL,
129 SECURE_LOGD("delegator server Main loop is created.");
130 g_main_loop_run(gMainLoop);
131 g_bus_unown_name(id);
132 g_main_loop_unref(gMainLoop);