mirror of
https://github.com/systemd/systemd.git
synced 2024-10-27 01:55:22 +03:00
login: implement sd_session_get_service()
This commit is contained in:
parent
4cd9a9d9ec
commit
eff406331a
@ -46,6 +46,7 @@
|
||||
<refname>sd_session_is_active</refname>
|
||||
<refname>sd_session_get_uid</refname>
|
||||
<refname>sd_session_get_seat</refname>
|
||||
<refname>sd_session_get_service</refname>
|
||||
<refpurpose>Determine state of a specific session</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
@ -69,6 +70,12 @@
|
||||
<paramdef>const char* <parameter>session</parameter></paramdef>
|
||||
<paramdef>char** <parameter>seat</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>sd_session_get_service</function></funcdef>
|
||||
<paramdef>const char* <parameter>session</parameter></paramdef>
|
||||
<paramdef>char** <parameter>service</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
@ -94,6 +101,15 @@
|
||||
returned string needs to be freed with the libc
|
||||
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
call after use.</para>
|
||||
|
||||
<para><function>sd_session_get_service()</function>
|
||||
may be used to determine the name of the service (as
|
||||
passed during PAM session setup) that registered the
|
||||
session identified by the specified session
|
||||
identifier. The returned string needs to be freed with
|
||||
the libc
|
||||
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
call after use.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -102,7 +118,8 @@
|
||||
<para>If the test succeeds
|
||||
<function>sd_session_is_active()</function> returns a
|
||||
positive integer, if it fails 0. On success
|
||||
<function>sd_session_get_uid()</function> and
|
||||
<function>sd_session_get_uid()</function>,
|
||||
<function>sd_session_get_service()</function> and
|
||||
<function>sd_session_get_seat()</function> return 0 or
|
||||
a positive integer. On failure, these calls return a
|
||||
negative errno-style error code.</para>
|
||||
@ -112,7 +129,8 @@
|
||||
<title>Notes</title>
|
||||
|
||||
<para>The <function>sd_session_is_active()</function>,
|
||||
<function>sd_session_get_uid()</function>, and
|
||||
<function>sd_session_get_uid()</function>,
|
||||
<function>sd_session_get_service()</function> and
|
||||
<function>sd_session_get_seat()</function> interfaces
|
||||
are available as shared library, which can be compiled
|
||||
and linked to with the
|
||||
|
@ -37,4 +37,5 @@ local:
|
||||
LIBSYSTEMD_LOGIN_38 {
|
||||
global:
|
||||
sd_pid_get_unit;
|
||||
sd_session_get_service;
|
||||
} LIBSYSTEMD_LOGIN_31;
|
||||
|
@ -415,6 +415,34 @@ _public_ int sd_session_get_seat(const char *session, char **seat) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
_public_ int sd_session_get_service(const char *session, char **service) {
|
||||
char *p, *s = NULL;
|
||||
int r;
|
||||
|
||||
if (!session)
|
||||
return -EINVAL;
|
||||
if (!service)
|
||||
return -EINVAL;
|
||||
|
||||
p = strappend("/run/systemd/sessions/", session);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
r = parse_env_file(p, NEWLINE, "SERVICE", &s, NULL);
|
||||
free(p);
|
||||
|
||||
if (r < 0) {
|
||||
free(s);
|
||||
return r;
|
||||
}
|
||||
|
||||
if (isempty(s))
|
||||
return -ENOENT;
|
||||
|
||||
*service = s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
_public_ int sd_seat_get_active(const char *seat, char **session, uid_t *uid) {
|
||||
char *p, *s = NULL, *t = NULL;
|
||||
int r;
|
||||
|
@ -83,6 +83,9 @@ int sd_session_get_uid(const char *session, uid_t *uid);
|
||||
/* Determine seat of session */
|
||||
int sd_session_get_seat(const char *session, char **seat);
|
||||
|
||||
/* Determine the (PAM) service name this session was registered by. */
|
||||
int sd_session_get_service(const char *session, char **service);
|
||||
|
||||
/* Return active session and user of seat */
|
||||
int sd_seat_get_active(const char *seat, char **session, uid_t *uid);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user