Commit 97e13058 authored by Lennart Poettering's avatar Lennart Poettering

sd-login: add a sd_pid_get_user_unit() call

parent 6c03089c
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
<refnamediv> <refnamediv>
<refname>sd_pid_get_session</refname> <refname>sd_pid_get_session</refname>
<refname>sd_pid_get_unit</refname> <refname>sd_pid_get_unit</refname>
<refname>sd_pid_get_user_unit</refname>
<refname>sd_pid_get_owner_uid</refname> <refname>sd_pid_get_owner_uid</refname>
<refpurpose>Determine session, service or owner of a session of a specific PID</refpurpose> <refpurpose>Determine session, service or owner of a session of a specific PID</refpurpose>
</refnamediv> </refnamediv>
...@@ -65,6 +66,12 @@ ...@@ -65,6 +66,12 @@
<paramdef>char** <parameter>unit</parameter></paramdef> <paramdef>char** <parameter>unit</parameter></paramdef>
</funcprototype> </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> <funcprototype>
<funcdef>int <function>sd_pid_get_owner_uid</function></funcdef> <funcdef>int <function>sd_pid_get_owner_uid</function></funcdef>
<paramdef>pid_t <parameter>pid</parameter></paramdef> <paramdef>pid_t <parameter>pid</parameter></paramdef>
...@@ -91,18 +98,28 @@ ...@@ -91,18 +98,28 @@
call after use.</para> call after use.</para>
<para><function>sd_pid_get_unit()</function> may be <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 service) identifier of a process identified by the
specified process identifier. The unit name is a short specified PID. The unit name is a short string,
string, suitable for usage in file system paths. Note suitable for usage in file system paths. Note that not
that not all processes are part of a unit/service all processes are part of a system unit/service
(e.g. user processes, or kernel threads). For (e.g. user processes, or kernel threads). For
processes not being part of a systemd unit/system processes not being part of a systemd system unit this
service this function will fail. The returned string function will fail. (More specifically: this call will
needs to be freed with the libc 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> <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para> 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 <para><function>sd_pid_get_owner_uid()</function> may
be used to determine the Unix user identifier of the be used to determine the Unix user identifier of the
owner of the session of a process identified the owner of the session of a process identified the
...@@ -131,7 +148,8 @@ ...@@ -131,7 +148,8 @@
<title>Notes</title> <title>Notes</title>
<para>The <function>sd_pid_get_session()</function>, <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 <function>sd_pid_get_owner_uid()</function> interfaces
are available as shared library, which can be compiled are available as shared library, which can be compiled
and linked to with the and linked to with the
......
...@@ -64,3 +64,8 @@ global: ...@@ -64,3 +64,8 @@ global:
sd_login_monitor_get_events; sd_login_monitor_get_events;
sd_login_monitor_get_timeout; sd_login_monitor_get_timeout;
} LIBSYSTEMD_LOGIN_198; } LIBSYSTEMD_LOGIN_198;
LIBSYSTEMD_LOGIN_202 {
global:
sd_pid_get_user_unit;
} LIBSYSTEMD_LOGIN_201;
...@@ -84,6 +84,17 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) { ...@@ -84,6 +84,17 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
return cg_pid_get_unit(pid, 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) { _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
int r; int r;
char *root, *cgroup, *p, *cc; char *root, *cgroup, *p, *cc;
......
...@@ -62,10 +62,15 @@ int sd_pid_get_session(pid_t pid, char **session); ...@@ -62,10 +62,15 @@ int sd_pid_get_session(pid_t pid, char **session);
* return an error for system processes. */ * return an error for system processes. */
int sd_pid_get_owner_uid(pid_t pid, uid_t *uid); 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 /* Get systemd unit (i.e. service) name from PID, for system
* error for non-service processes. */ * services. This will return an error for non-service processes. */
int sd_pid_get_unit(pid_t, char **unit); 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 */ /* Get state from uid. Possible states: offline, lingering, online, active, closing */
int sd_uid_get_state(uid_t uid, char**state); int sd_uid_get_state(uid_t uid, char**state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment