diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | am_daemon/amd_request.c | 7 | ||||
-rw-r--r-- | am_session_agent/agent.c | 28 | ||||
-rw-r--r-- | include/app_sock.h | 1 | ||||
-rw-r--r-- | packaging/ac.socket | 6 | ||||
-rw-r--r-- | packaging/amd_session_agent.socket | 5 | ||||
-rw-r--r-- | packaging/aul.spec | 27 | ||||
-rw-r--r-- | src/app_sock.c | 14 |
8 files changed, 68 insertions, 22 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1374bb24..54032e42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ INCLUDE(FindPkgConfig) SET(AUL-1_PKG_CHECK_MODULES dlog libprivilege-control app-checker rua glib-2.0 vconf pkgmgr-info privacy-manager-client) pkg_check_modules(pkgs REQUIRED ${AUL-1_PKG_CHECK_MODULES} ) -pkg_check_modules(libpkgs REQUIRED dlog bundle dbus-glib-1 ail xdgmime app-checker libtzplatform-config pkgmgr-info) +pkg_check_modules(libpkgs REQUIRED dlog bundle dbus-glib-1 ail xdgmime app-checker libtzplatform-config pkgmgr-info libsystemd-daemon) PKG_CHECK_MODULES(PKGS REQUIRED glib-2.0 gio-2.0 dlog bundle rua) FIND_LIBRARY(LIB_DL dl) diff --git a/am_daemon/amd_request.c b/am_daemon/amd_request.c index 6dc90fff..a2c46979 100644 --- a/am_daemon/amd_request.c +++ b/am_daemon/amd_request.c @@ -422,7 +422,12 @@ int _requset_init(struct amdmgr *amd) GPollFD *gpollfd; GSource *src; - fd = __create_server_sock(AUL_UTIL_PID); + fd = __create_sock_activation(); + if (fd == -1) { + _D("Create server socket without socket activation"); + fd = __create_server_sock(AUL_UTIL_PID); + } + src = g_source_new(&funcs, sizeof(GSource)); gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD)); diff --git a/am_session_agent/agent.c b/am_session_agent/agent.c index 6193cf90..817dedf0 100644 --- a/am_session_agent/agent.c +++ b/am_session_agent/agent.c @@ -731,25 +731,27 @@ _static_ void __agent_main_loop(int main_fd) _static_ int __agent_pre_init(int argc, char **argv) { int fd; - char *socket_path = NULL; + char socket_path[PATH_MAX]; /* signal init*/ __signal_init(); - /* get my(agent) command line*/ - agent_cmdline = __proc_get_cmdline_bypid(getpid()); - if (agent_cmdline == NULL) { - _E("agent cmdline fail to get"); - return -1; - } - _D("agent cmdline = %s", agent_cmdline); + /* get my(agent) command line*/ + agent_cmdline = __proc_get_cmdline_bypid(getpid()); + if (agent_cmdline == NULL) { + _E("agent cmdline fail to get"); + return -1; + } + _D("agent cmdline = %s", agent_cmdline); /* create agent socket */ - asprintf(&socket_path,"/run/user/%d/amd_agent",getuid()); - if(socket_path) + + fd = __create_sock_activation(); + if (fd == -1) { + _D("Create server socket without socket activation"); + snprintf(socket_path, sizeof(socket_path), + "/run/user/%d/amd_agent", getuid()); fd = __create_server_sock_by_path(socket_path); - else - return -1; - free(socket_path); + } if (fd < 0) { _E("server sock error"); return -1; diff --git a/include/app_sock.h b/include/app_sock.h index f6129c6b..7b70ac1e 100644 --- a/include/app_sock.h +++ b/include/app_sock.h @@ -90,5 +90,6 @@ app_pkt_t *__app_recv_raw(int fd, int *clifd, struct ucred *cr); app_pkt_t *__app_send_cmd_with_result(int pid, int cmd, unsigned char *kb_data, int datalen); int __create_agent_client_sock(int uid); int __create_server_sock_by_path(char *path); +int __create_sock_activation(void); #endif diff --git a/packaging/ac.socket b/packaging/ac.socket new file mode 100644 index 00000000..16a8e1fd --- /dev/null +++ b/packaging/ac.socket @@ -0,0 +1,6 @@ +[Socket] +ListenStream=/tmp/alaunch/-2 +DirectoryMode=0777 + +[Install] +WantedBy=sockets.target diff --git a/packaging/amd_session_agent.socket b/packaging/amd_session_agent.socket new file mode 100644 index 00000000..cf31aa8b --- /dev/null +++ b/packaging/amd_session_agent.socket @@ -0,0 +1,5 @@ +[Socket] +ListenStream=/run/user/%U/amd_agent + +[Install] +WantedBy=sockets.target diff --git a/packaging/aul.spec b/packaging/aul.spec index 41e0a681..7ae9d723 100644 --- a/packaging/aul.spec +++ b/packaging/aul.spec @@ -5,8 +5,10 @@ Release: 1 Group: System/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz -Source102: ac.service +Source101: ac.service +Source102: ac.socket Source103: amd_session_agent.service +Source104: amd_session_agent.socket Source1001: %{name}.manifest Requires(post): /sbin/ldconfig @@ -32,6 +34,7 @@ BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: libattr-devel BuildRequires: pkgconfig(privacy-manager-client) BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: pkgconfig(libsystemd-daemon) %description Application utility library @@ -82,10 +85,18 @@ mkdir -p %{buildroot}%{TZ_SYS_DB} sqlite3 %{buildroot}%{TZ_SYS_DB}/.mida.db < %{buildroot}%{_datadir}/aul/mida_db.sql rm -rf %{buildroot}%{_datadir}/aul/mida_db.sql -mkdir -p %{buildroot}%{_unitdir} -mkdir -p %{buildroot}%{_unitdir_user} -install -m 0644 %SOURCE102 %{buildroot}%{_unitdir}/ac.service +mkdir -p %{buildroot}%{_unitdir}/default.target.wants +mkdir -p %{buildroot}%{_unitdir}/sockets.target.wants +mkdir -p %{buildroot}%{_unitdir_user}/default.target.wants +mkdir -p %{buildroot}%{_unitdir_user}/sockets.target.wants +install -m 0644 %SOURCE101 %{buildroot}%{_unitdir}/ac.service +install -m 0644 %SOURCE102 %{buildroot}%{_unitdir}/ac.socket install -m 0644 %SOURCE103 %{buildroot}%{_unitdir_user}/amd_session_agent.service +install -m 0644 %SOURCE104 %{buildroot}%{_unitdir_user}/amd_session_agent.socket +ln -sf ../ac.service %{buildroot}%{_unitdir}/default.target.wants/ac.service +ln -sf ../ac.socket %{buildroot}%{_unitdir}/sockets.target.wants/ac.socket +ln -sf ../amd_session_agent.service %{buildroot}%{_unitdir_user}/default.target.wants/amd_session_agent.service +ln -sf ../amd_session_agent.socket %{buildroot}%{_unitdir_user}/sockets.target.wants/amd_session_agent.socket %preun if [ $1 == 0 ]; then @@ -96,8 +107,6 @@ fi %post /sbin/ldconfig -systemctl enable ac -systemctl --global enable amd_session_agent systemctl daemon-reload if [ $1 == 1 ]; then systemctl restart ac.service @@ -126,7 +135,13 @@ systemctl daemon-reload %{_datadir}/aul/preload_list.txt %{_datadir}/aul/preexec_list.txt %{_unitdir}/ac.service +%{_unitdir}/default.target.wants/ac.service +%{_unitdir}/ac.socket +%{_unitdir}/sockets.target.wants/ac.socket %{_unitdir_user}/amd_session_agent.service +%{_unitdir_user}/default.target.wants/amd_session_agent.service +%{_unitdir_user}/amd_session_agent.socket +%{_unitdir_user}/sockets.target.wants/amd_session_agent.socket %{_bindir}/amd %{_bindir}/daemon-manager-release-agent %{_bindir}/daemon-manager-launch-agent diff --git a/src/app_sock.c b/src/app_sock.c index 84b6f4f9..1bc43eda 100644 --- a/src/app_sock.c +++ b/src/app_sock.c @@ -28,6 +28,7 @@ #include <sys/xattr.h> #include <errno.h> #include <fcntl.h> +#include <systemd/sd-daemon.h> #include "app_sock.h" #include "simple_util.h" @@ -187,10 +188,21 @@ int __create_server_sock_by_path(char *path) return fd; } +int __create_sock_activation(void) +{ + int fds; + fds = sd_listen_fds(0); + if (fds == 1) + return SD_LISTEN_FDS_START; + if (fds > 1) + _E("Too many file descriptors received.\n"); + else + _D("There is no socket stream"); - + return -1; +} int __create_agent_client_sock(int uid) { |