Commit eff40633 authored by Lennart Poettering's avatar Lennart Poettering

login: implement sd_session_get_service()

parent 4cd9a9d9
......@@ -46,6 +46,7 @@
<refpurpose>Determine state of a specific session</refpurpose>
......@@ -69,6 +70,12 @@
<paramdef>const char* <parameter>session</parameter></paramdef>
<paramdef>char** <parameter>seat</parameter></paramdef>
<funcdef>int <function>sd_session_get_service</function></funcdef>
<paramdef>const char* <parameter>session</parameter></paramdef>
<paramdef>char** <parameter>service</parameter></paramdef>
......@@ -94,6 +101,15 @@
returned string needs to be freed with the libc
call after use.</para>
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
call after use.</para>
......@@ -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_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 @@
<para>The <function>sd_session_is_active()</function>,
<function>sd_session_get_uid()</function>, and
<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:
......@@ -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);
if (r < 0) {
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);
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