]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-login: add sd_session_get_leader interface
authorThorsten Kukuk <kukuk@suse.com>
Tue, 6 Jun 2023 12:52:22 +0000 (14:52 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 7 Jun 2023 08:33:36 +0000 (09:33 +0100)
man/sd_session_is_active.xml
src/libsystemd/libsystemd.sym
src/libsystemd/sd-login/sd-login.c
src/systemd/sd-login.h

index a3cc9befe8daea268a5b2d077129b9b5e4fd0b38..8639599eccc7dc903cdbef4b946421f31d28da89 100644 (file)
@@ -33,6 +33,7 @@
     <refname>sd_session_get_vt</refname>
     <refname>sd_session_get_remote_host</refname>
     <refname>sd_session_get_remote_user</refname>
+    <refname>sd_session_get_leader</refname>
     <refpurpose>Determine state of a specific session</refpurpose>
   </refnamediv>
 
         <paramdef>char **<parameter>display</parameter></paramdef>
       </funcprototype>
 
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_leader</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>pid_t *<parameter>leader</parameter></paramdef>
+      </funcprototype>
+
       <funcprototype>
         <funcdef>int <function>sd_session_get_remote_host</function></funcdef>
         <paramdef>const char *<parameter>session</parameter></paramdef>
     <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
     call after use.</para>
 
+    <para><function>sd_session_get_leader()</function> may be used to
+    determine the PID of the leader of the session identified by the
+    specified session identifier.</para>
+
     <para><function>sd_session_get_remote_host()</function> may be
     used to determine the remote hostname of the session identified by
     the specified session identifier. The returned string needs to be
     <function>sd_session_get_type()</function>,
     <function>sd_session_get_class()</function>,
     <function>sd_session_get_display()</function>,
+    <function>sd_session_get_leader()</function>,
     <function>sd_session_get_remote_user()</function>,
     <function>sd_session_get_remote_host()</function> and
     <function>sd_session_get_tty()</function> return 0 or
index 936a3577f546e29f5f099df474c0030d0ccd77de..ea13e02719b86cc386fe41563675976419a4002e 100644 (file)
@@ -826,4 +826,5 @@ global:
         sd_pid_notify_barrier;
         sd_event_source_leave_ratelimit;
         sd_journal_step_one;
+        sd_session_get_leader;
 } LIBSYSTEMD_253;
index c5d54bbf74d238afd0c2b567a1ff98e4a7f781a7..4d09b156536c06a875749b6b804f00e83a6ac867 100644 (file)
@@ -870,6 +870,25 @@ _public_ int sd_session_get_remote_host(const char *session, char **remote_host)
         return session_get_string(session, "REMOTE_HOST", remote_host);
 }
 
+_public_ int sd_session_get_leader(const char *session, pid_t *leader) {
+        _cleanup_free_ char *leader_string = NULL;
+        pid_t pid;
+        int r;
+
+        assert_return(leader, -EINVAL);
+
+        r = session_get_string(session, "LEADER", &leader_string);
+        if (r < 0)
+                return r;
+
+        r = parse_pid(leader_string, &pid);
+        if (r < 0)
+                return r;
+
+        *leader = pid;
+        return 0;
+}
+
 _public_ int sd_seat_get_active(const char *seat, char **session, uid_t *uid) {
         _cleanup_free_ char *p = NULL, *s = NULL, *t = NULL;
         int r;
index 7246d9f472a5c83f826e1b5b7827735809ca6134..4700a76441a22d651c6361efdd4980eeff85cfa4 100644 (file)
@@ -184,6 +184,9 @@ int sd_session_get_desktop(const char *session, char **desktop);
 /* Determine the X11 display of this session. */
 int sd_session_get_display(const char *session, char **display);
 
+/* Determine the leader process of this session. */
+int sd_session_get_leader(const char *session, pid_t *leader);
+
 /* Determine the remote host of this session. */
 int sd_session_get_remote_host(const char *session, char **remote_host);