1
0
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:
Lennart Poettering 2012-01-05 23:14:22 +01:00
parent 4cd9a9d9ec
commit eff406331a
4 changed files with 52 additions and 2 deletions

View File

@ -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

View File

@ -37,4 +37,5 @@ local:
LIBSYSTEMD_LOGIN_38 {
global:
sd_pid_get_unit;
sd_session_get_service;
} LIBSYSTEMD_LOGIN_31;

View File

@ -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;

View File

@ -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);