mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
sd-login: add a sd_pid_get_user_unit() call
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user