diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-04-15 14:16:45 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-04-15 14:16:45 +0200 |
commit | 97e13058170c7759dbbc239d264b9a31b0c81079 (patch) | |
tree | da7a8337cb4193037572b5331844110251b21aa8 | |
parent | 6c03089c32c251d823173bda4d809a9e643219f0 (diff) |
sd-login: add a sd_pid_get_user_unit() call
-rw-r--r-- | man/sd_pid_get_session.xml | 34 | ||||
-rw-r--r-- | src/login/libsystemd-login.sym | 5 | ||||
-rw-r--r-- | src/login/sd-login.c | 11 | ||||
-rw-r--r-- | src/systemd/sd-login.h | 9 |
4 files changed, 49 insertions, 10 deletions
diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml index 511fcf3ede..d2b64195a6 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_session.xml @@ -45,6 +45,7 @@ <refnamediv> <refname>sd_pid_get_session</refname> <refname>sd_pid_get_unit</refname> + <refname>sd_pid_get_user_unit</refname> <refname>sd_pid_get_owner_uid</refname> <refpurpose>Determine session, service or owner of a session of a specific PID</refpurpose> </refnamediv> @@ -66,6 +67,12 @@ </funcprototype> <funcprototype> + <funcdef>int <function>sd_pid_get_user_unit</function></funcdef> + <paramdef>pid_t <parameter>pid</parameter></paramdef> + <paramdef>char** <parameter>unit</parameter></paramdef> + </funcprototype> + + <funcprototype> <funcdef>int <function>sd_pid_get_owner_uid</function></funcdef> <paramdef>pid_t <parameter>pid</parameter></paramdef> <paramdef>uid_t* <parameter>uid</parameter></paramdef> @@ -91,18 +98,28 @@ call after use.</para> <para><function>sd_pid_get_unit()</function> may be - used to determine the systemd unit (i.e. system + used to determine the systemd system unit (i.e. system service) identifier of a process identified by the - specified process identifier. The unit name is a short - string, suitable for usage in file system paths. Note - that not all processes are part of a unit/service + specified PID. The unit name is a short string, + suitable for usage in file system paths. Note that not + all processes are part of a system unit/service (e.g. user processes, or kernel threads). For - processes not being part of a systemd unit/system - service this function will fail. The returned string - needs to be freed with the libc + processes not being part of a systemd system unit this + function will fail. (More specifically: this call will + not work for processes that are part of user units, + use <function>sd_pid_get_user_unit()</function> for + that.) The returned string needs to be freed with the + libc <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry> call after use.</para> + <para><function>sd_pid_get_user_unit()</function> may + be used to determine the systemd user unit (i.e. user + service) identifier of a process identified by the + specified PID. This is similar to + <function>sd_pid_get_unit()</function> but applies to + user units instead of system units.</para> + <para><function>sd_pid_get_owner_uid()</function> may be used to determine the Unix user identifier of the owner of the session of a process identified the @@ -131,7 +148,8 @@ <title>Notes</title> <para>The <function>sd_pid_get_session()</function>, - <function>sd_pid_get_pid()</function>, and + <function>sd_pid_get_unit()</function>, + <function>sd_pid_get_user_unit()</function>, and <function>sd_pid_get_owner_uid()</function> interfaces are available as shared library, which can be compiled and linked to with the diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym index ce2304a1ba..9048de86a9 100644 --- a/src/login/libsystemd-login.sym +++ b/src/login/libsystemd-login.sym @@ -64,3 +64,8 @@ global: sd_login_monitor_get_events; sd_login_monitor_get_timeout; } LIBSYSTEMD_LOGIN_198; + +LIBSYSTEMD_LOGIN_202 { +global: + sd_pid_get_user_unit; +} LIBSYSTEMD_LOGIN_201; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index f433e3e80b..4c918f2105 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -84,6 +84,17 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) { return cg_pid_get_unit(pid, unit); } +_public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { + + if (pid < 0) + return -EINVAL; + + if (!unit) + return -EINVAL; + + return cg_pid_get_user_unit(pid, unit); +} + _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { int r; char *root, *cgroup, *p, *cc; diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h index d05424dbf3..11282b7611 100644 --- a/src/systemd/sd-login.h +++ b/src/systemd/sd-login.h @@ -62,10 +62,15 @@ int sd_pid_get_session(pid_t pid, char **session); * return an error for system processes. */ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid); -/* Get systemd unit (i.e. service) name from PID. This will return an - * error for non-service processes. */ +/* Get systemd unit (i.e. service) name from PID, for system + * services. This will return an error for non-service processes. */ int sd_pid_get_unit(pid_t, char **unit); +/* Get systemd unit (i.e. service) name from PID, for user + * services. This will return an error for non-user-service + * processes. */ +int sd_pid_get_user_unit(pid_t, char **unit); + /* Get state from uid. Possible states: offline, lingering, online, active, closing */ int sd_uid_get_state(uid_t uid, char**state); |