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 @@
<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>
......@@ -65,6 +66,12 @@
<paramdef>char** <parameter>unit</parameter></paramdef>
</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>
......@@ -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
......
......@@ -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;
......@@ -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;
......
......@@ -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);
......
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