#include <msg.h>
#include <cynara-creds-gdbus.h>
#include <cynara-session.h>
+#include <systemd/sd-login.h>
#include "callmgr-util.h"
#include "callmgr-log.h"
#define CALLMGR_CLI_SHOW_ID "*31#"
#define CALLMGR_CLI_HIDE_ID "#31#"
#define CALLMGR_PHONE_NUMBER_LENGTH_MAX 82
+#define CALLMGR_SYSTEM_SLICE "system.slice"
#define PERM_WRITE "w"
#define PERM_EXECUTE "x"
return TRUE;
}
+static int __callmgr_util_get_active_uid(uid_t *uid)
+{
+ int ret = 0;
+ uid_t *active_user_list = NULL;
+ char *slice = NULL;
+ *uid = getuid();
+
+ ret = sd_pid_get_slice(getpid(), &slice);
+ if (0 <= ret && slice) {
+ if (!g_strcmp0(slice, CALLMGR_SYSTEM_SLICE)) {
+ ret = sd_get_active_uids(&active_user_list);
+ /* the number of active users is 1 in tizen3.0 */
+ if (1 == ret && active_user_list) {
+ *uid = active_user_list[0];
+ dbg("uid = %d", *uid);
+ } else {
+ err("sd_get_active_uids() Fail(%d)", ret);
+ free(active_user_list);
+ free(slice);
+ return 0;
+ }
+ free(active_user_list);
+ }
+ free(slice);
+ } else {
+ err("sd_pid_get_slice() Fail(%d)", ret);
+ }
+ dbg("getuid() = %d, uid = %d", getuid(), *uid);
+
+ return 0;
+}
+
static gpointer __callmgr_util_launch_voice_call(gpointer data)
{
GThread* selfi = g_thread_self();
CM_RETURN_VAL_IF_FAIL(cb_data, NULL);
char buf[2] = {0, };
bundle *kb = NULL;
+ uid_t uid = 0;
kb = bundle_create();
g_snprintf(buf, 2, "%d", cb_data->sim_slot);
dbg("sim_slot : [%s]", buf);
appsvc_add_data(kb, "sim_slot", buf);
- appsvc_run_service(kb, 0, NULL, NULL);
+ /* To support multi-user, launch call-ui with active uid */
+ __callmgr_util_get_active_uid(&uid);
+ appsvc_usr_run_service(kb, 0, NULL, NULL, uid);
bundle_free(kb);
g_free(cb_data);
%define major 0
%define minor 1
-%define patchlevel 83
+%define patchlevel 84
%define ext_feature 0
Name: call-manager
BuildRequires: pkgconfig(cynara-creds-gdbus)
BuildRequires: pkgconfig(cynara-session)
BuildRequires: pkgconfig(msg-service)
+BuildRequires: pkgconfig(libsystemd)
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
%install
%make_install
-mkdir -p %{buildroot}/usr/lib/systemd/user/default.target.wants
-ln -s /usr/lib/systemd/user/callmgr.service %{buildroot}/usr/lib/systemd/user/default.target.wants/callmgr.service
+mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
+ln -s %{_unitdir}/callmgr.service %{buildroot}%{_unitdir}/multi-user.target.wants/callmgr.service
mkdir -p %{buildroot}/etc/dbus-1/system.d/
cp %{SOURCE1} %{buildroot}/etc/dbus-1/system.d/callmgr.conf
mkdir -p %{buildroot}/usr/share/license
%files
%manifest callmgr.manifest
%defattr(644,root,root,-)
-%attr(755,root,root) %{_bindir}/callmgrd
+%caps(cap_dac_read_search=eip) %attr(755,root,root) %{_bindir}/callmgrd
#/etc/*
-/usr/lib/systemd/user/callmgr.service
-/usr/lib/systemd/user/default.target.wants/callmgr.service
+%{_unitdir}/callmgr.service
+%{_unitdir}/multi-user.target.wants/callmgr.service
/etc/dbus-1/system.d/callmgr.conf
%{_datadir}/license/call-manager
/usr/share/call-manager/*