Add build Option for multi-user support 33/6033/4 submit/tizen/20130808.123840
authorBaptiste DURAND <baptiste.durand@eurogiciel.fr>
Fri, 2 Aug 2013 06:55:30 +0000 (08:55 +0200)
committerBaptiste DURAND <baptiste.durand@eurogiciel.fr>
Fri, 2 Aug 2013 06:55:30 +0000 (08:55 +0200)
CMakeLists.txt
am_daemon/amd_launch.c
am_daemon/amd_request.c
launchpad_src/config.h
packaging/ac.service
packaging/ac_user.service [new file with mode: 0644]
packaging/aul.changes
packaging/aul.spec
packaging/launchpad-preload_user.service [new file with mode: 0644]
src/pkginfo.c

index b502f93..9ff4230 100755 (executable)
@@ -20,6 +20,7 @@ MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
 # Set required packages
 INCLUDE(FindPkgConfig)
 
+OPTION(MULTI_USER_SUPPORT "Enable multi-user support" OFF)
 OPTION(ENABLE_PRIVACY_MANAGER "Enable privacy manager support" ON)
 IF(ENABLE_PRIVACY_MANAGER)
     ADD_DEFINITIONS("-DPRIVACY_MANAGER")
@@ -27,6 +28,12 @@ IF(ENABLE_PRIVACY_MANAGER)
 ELSE(ENABLE_PRIVACY_MANAGER)
     pkg_check_modules(pkgs REQUIRED dlog ecore x11 libprivilege-control app-checker rua glib-2.0 ecore-x ecore-input evas vconf pkgmgr-info app2sd)
 ENDIF(ENABLE_PRIVACY_MANAGER)
+IF(MULTI_USER_SUPPORT)
+    ADD_DEFINITIONS("-DMULTI_USER_SUPPORT")
+ELSE(MULTI_USER_SUPPORT)
+       ADD_DEFINITIONS("-DDAC_ACTIVATE")
+ENDIF(MULTI_USER_SUPPORT)
+
 pkg_check_modules(libpkgs REQUIRED dlog bundle dbus-glib-1 ail xdgmime app-checker libsmack)
 PKG_CHECK_MODULES(PKGS REQUIRED glib-2.0 gio-2.0 dlog bundle)
 
index e1547ab..a233c28 100755 (executable)
@@ -43,8 +43,6 @@
 #include "amd_cgutil.h"
 #include "launch.h"
 
-#define DAC_ACTIVATE
-
 #include "access_control.h"
 
 
index 6223766..9fb85a3 100755 (executable)
 #include "amd_appinfo.h"
 #include "amd_cgutil.h"
 #include "amd_status.h"
+#include "access_control.h"
+
 
 
-#define INHOUSE_UID     5000
 
 struct appinfomgr *_raf;
 struct cginfo *_rcg;
@@ -138,11 +139,13 @@ static int __app_process_by_pid(int cmd,
 
        if (pkg_name == NULL)
                return -1;
+#ifdef DAC_ACTIVATE
 
        if ((cr->uid != 0) && (cr->uid != INHOUSE_UID)) {
                _E("reject by security rule, your uid is %u\n", cr->uid);
                return -1;
        }
+#endif
 
        pid = atoi(pkg_name);
        if (pid <= 1) {
@@ -348,6 +351,7 @@ static gboolean __request_handler(gpointer data)
                        __real_send(clifd, ret);
                        break;
                case APP_RUNNING_INFO:
+                       _D("APP_RUNNING_INFO ");
                        _status_send_running_appinfo_v2(clifd);
                        break;
                case APP_IS_RUNNING:
index f5728cf..af242ed 100755 (executable)
@@ -21,7 +21,6 @@
 
 
 #define LAUNCHPAD_LOG
-#define DAC_ACTIVATE
 #define PRELOAD_ACTIVATE
 #define PREEXEC_ACTIVATE
 /*#define GL_ACTIVATE*/
index 4f6704d..8c197c8 100644 (file)
@@ -1,5 +1,5 @@
 #
-# classical example of a socket activated service?
+#  Systemd script to Launch AMD
 #
 
 [Unit]
diff --git a/packaging/ac_user.service b/packaging/ac_user.service
new file mode 100644 (file)
index 0000000..0c6e8a7
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# Systemd script to Launch AMD
+#
+
+[Unit]
+Description=Start the Access Control server
+
+[Service]
+ExecStart=/usr/bin/amd
+
+[Install]
+WantedBy=tizen-middleware.target
index 2040f50..db7cc83 100644 (file)
@@ -1,3 +1,6 @@
+* Fri Aug 02 2013 Baptiste DURAND <baptiste.durand@eurogiciel.fr> accepted/tizen/20130731.144156@ab708cb
+- Add build Option for multi-user support
+
 * Mon Jul 29 2013 Chengwei Yang <chengwei.yang@intel.com>
 - [systemd] Fix user runtime directory
 
index f714a80..a599be1 100644 (file)
@@ -1,4 +1,5 @@
 %bcond_without privacy-manager-client
+%bcond_with multi_user
 
 Name:       aul
 Summary:    App utility library
@@ -9,7 +10,9 @@ License:    Apache License, Version 2.0
 Source0:    %{name}-%{version}.tar.gz
 Source101:  launchpad-preload@.service
 Source102:  ac.service
-Source1001:    aul.manifest
+Source103:  launchpad-preload_user.service
+Source104:  ac_user.service
+Source1001: %{name}.manifest
 
 Requires(post): /sbin/ldconfig
 Requires(post): /usr/bin/systemctl
@@ -58,10 +61,16 @@ Application utility library (devel)
 cp %{SOURCE1001} .
 
 %build
+%cmake . \
 %if %{with privacy-manger-client}
-%cmake . -DENABLE_PRIVACY_MANAGER=On
+       -DENABLE_PRIVACY_MANAGER=On \
 %else
-%cmake . -DENABLE_PRIVACY_MANAGER=Off
+       -DENABLE_PRIVACY_MANAGER=Off \
+%endif
+%if %{with multi_user}
+       -DMULTI_USER_SUPPORT=On
+%else
+       -DMULTI_USER_SUPPORT=Off
 %endif
 
 make %{?jobs:-j%jobs}
@@ -81,30 +90,42 @@ ln -sf ../../init.d/launchpad_run %{buildroot}/%{_sysconfdir}/rc.d/rc4.d/S80laun
 mkdir -p %{buildroot}/opt/dbspace
 sqlite3 %{buildroot}/opt/dbspace/.mida.db < %{buildroot}/usr/share/aul/mida_db.sql
 rm -rf %{buildroot}/usr/share/aul/mida_db.sql
-
+%if %{with multi_user}
+mkdir -p %{buildroot}/%{_unitdir_user}/tizen-middleware.target.wants
+install -m 0644 %SOURCE103 %{buildroot}/%{_unitdir_user}/launchpad-preload.service
+install -m 0644 %SOURCE104 %{buildroot}/%{_unitdir_user}/ac.service
+ln -s ../launchpad-preload.service %{buildroot}/%{_unitdir_user}/tizen-middleware.target.wants/launchpad-preload.service
+ln -s ../ac.service %{buildroot}/%{_unitdir_user}/tizen-middleware.target.wants/ac.service
+%else
 mkdir -p %{buildroot}/%{_unitdir}/graphical.target.wants
 install -m 0644 %SOURCE101 %{buildroot}/%{_unitdir}/launchpad-preload@.service
 install -m 0644 %SOURCE102 %{buildroot}/%{_unitdir}/ac.service
 ln -s ../launchpad-preload@.service %{buildroot}/%{_unitdir}/graphical.target.wants/launchpad-preload@app.service
 ln -s ../ac.service %{buildroot}/%{_unitdir}/graphical.target.wants/ac.service
-
+%endif
 
 %preun
 if [ $1 == 0 ]; then
+%if !%{with multi_user}
     systemctl stop launchpad-preload@app.service
     systemctl stop ac.service
+%endif
 fi
 
 %post
 /sbin/ldconfig
 systemctl daemon-reload
+%if !%{with multi_user}
 if [ $1 == 1 ]; then
     systemctl restart launchpad-preload@app.service
     systemctl restart ac.service
 fi
+%endif
 
 %postun -p /sbin/ldconfig
+%if !%{with multi_user}
 systemctl daemon-reload
+%endif
 
 %files
 %manifest %{name}.manifest
@@ -125,10 +146,20 @@ systemctl daemon-reload
 /usr/share/aul/preload_list.txt
 /usr/share/aul/preexec_list.txt
 %{_bindir}/launchpad_preloading_preinitializing_daemon
+
+%if %{with multi_user}
+%{_unitdir_user}/tizen-middleware.target.wants/launchpad-preload.service
+%{_unitdir_user}/tizen-middleware.target.wants/ac.service
+%{_unitdir_user}/launchpad-preload.service
+%{_unitdir_user}/ac.service
+%else
 %{_unitdir}/graphical.target.wants/launchpad-preload@app.service
 %{_unitdir}/graphical.target.wants/ac.service
 %{_unitdir}/launchpad-preload@.service
 %{_unitdir}/ac.service
+%endif
+
+
 /usr/bin/amd
 /usr/bin/daemon-manager-release-agent
 /usr/bin/daemon-manager-launch-agent
diff --git a/packaging/launchpad-preload_user.service b/packaging/launchpad-preload_user.service
new file mode 100644 (file)
index 0000000..afc9b1c
--- /dev/null
@@ -0,0 +1,9 @@
+[Unit]
+Description=Start the preload/preinit daemon
+After=ac.service
+
+[Service]
+ExecStart=/usr/bin/launchpad_preloading_preinitializing_daemon "                                                                                                                                                                                                         "
+
+[Install]
+WantedBy=tizen-middleware.target
index 245b51d..9d2d9b8 100755 (executable)
@@ -120,7 +120,13 @@ SLPAPI int aul_app_get_appid_bypid(int pid, char *appid, int len)
        app_pkt_t *pkt = NULL;
        int pgid;
 
+#ifndef MULTI_USER_SUPPORT
+       //Test if an Application (getpid test) or AMD deamon itself (getuid / geteuid) calls this function
        if(pid == getpid() || getuid()==0 || geteuid()==0) {
+#else
+       //In this case , AMD is launched as User => Remove test to avoid deadlock on socket handler
+       {
+#endif
                if (__get_pkgname_bypid(pid, appid, len) == 0) {
                        _D("appid for %d is %s", pid, appid);
                        return AUL_R_OK;