From: Lennart Poettering Date: Mon, 15 Apr 2013 12:16:45 +0000 (+0200) Subject: sd-login: add a sd_pid_get_user_unit() call X-Git-Tag: v202~91 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=97e13058170c7759dbbc239d264b9a31b0c81079 sd-login: add a sd_pid_get_user_unit() call --- diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml index 511fcf3ed..d2b64195a 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_session.xml @@ -45,6 +45,7 @@ sd_pid_get_session sd_pid_get_unit + sd_pid_get_user_unit sd_pid_get_owner_uid Determine session, service or owner of a session of a specific PID @@ -65,6 +66,12 @@ char** unit + + int sd_pid_get_user_unit + pid_t pid + char** unit + + int sd_pid_get_owner_uid pid_t pid @@ -91,18 +98,28 @@ call after use. sd_pid_get_unit() 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 sd_pid_get_user_unit() for + that.) The returned string needs to be freed with the + libc free3 call after use. + sd_pid_get_user_unit() 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 + sd_pid_get_unit() but applies to + user units instead of system units. + sd_pid_get_owner_uid() may be used to determine the Unix user identifier of the owner of the session of a process identified the @@ -131,7 +148,8 @@ Notes The sd_pid_get_session(), - sd_pid_get_pid(), and + sd_pid_get_unit(), + sd_pid_get_user_unit(), and sd_pid_get_owner_uid() 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 ce2304a1b..9048de86a 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 f433e3e80..4c918f210 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 d05424dbf..11282b761 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);