chiark / gitweb /
sd-login: add a sd_pid_get_user_unit() call
authorLennart Poettering <lennart@poettering.net>
Mon, 15 Apr 2013 12:16:45 +0000 (14:16 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 15 Apr 2013 12:16:45 +0000 (14:16 +0200)
man/sd_pid_get_session.xml
src/login/libsystemd-login.sym
src/login/sd-login.c
src/systemd/sd-login.h

index 511fcf3..d2b6419 100644 (file)
@@ -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>
                         </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>
                                 <paramdef>uid_t* <parameter>uid</parameter></paramdef>
                 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
                 <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
index ce2304a..9048de8 100644 (file)
@@ -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;
index f433e3e..4c918f2 100644 (file)
@@ -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;
index d05424d..11282b7 100644 (file)
@@ -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);