]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup-util: add pidref counterparts for cg_pid_get_session() + cg_pid_get_owner_uid()
authorLennart Poettering <lennart@poettering.net>
Tue, 19 Nov 2024 15:35:26 +0000 (16:35 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 6 Jan 2025 08:54:41 +0000 (09:54 +0100)
src/basic/cgroup-util.c
src/basic/cgroup-util.h
src/test/test-cgroup-util.c

index 8247b0c25fc8e53b7401e5fe8f124a7e19524d84..9d41db288344b2b10ed88acd1f6ecda3d02550b6 100644 (file)
@@ -1402,6 +1402,28 @@ int cg_pid_get_session(pid_t pid, char **ret_session) {
         return cg_path_get_session(cgroup, ret_session);
 }
 
+int cg_pidref_get_session(const PidRef *pidref, char **ret) {
+        int r;
+
+        if (!pidref_is_set(pidref))
+                return -ESRCH;
+        if (pidref_is_remote(pidref))
+                return -EREMOTE;
+
+        _cleanup_free_ char *session = NULL;
+        r = cg_pid_get_session(pidref->pid, &session);
+        if (r < 0)
+                return r;
+
+        r = pidref_verify(pidref);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = TAKE_PTR(session);
+        return 0;
+}
+
 int cg_path_get_owner_uid(const char *path, uid_t *ret_uid) {
         _cleanup_free_ char *slice = NULL;
         char *start, *end;
@@ -1439,6 +1461,29 @@ int cg_pid_get_owner_uid(pid_t pid, uid_t *ret_uid) {
         return cg_path_get_owner_uid(cgroup, ret_uid);
 }
 
+int cg_pidref_get_owner_uid(const PidRef *pidref, uid_t *ret) {
+        int r;
+
+        if (!pidref_is_set(pidref))
+                return -ESRCH;
+        if (pidref_is_remote(pidref))
+                return -EREMOTE;
+
+        uid_t uid;
+        r = cg_pid_get_owner_uid(pidref->pid, &uid);
+        if (r < 0)
+                return r;
+
+        r = pidref_verify(pidref);
+        if (r < 0)
+                return r;
+
+        if (ret)
+                *ret = uid;
+
+        return 0;
+}
+
 int cg_path_get_slice(const char *p, char **ret_slice) {
         const char *e = NULL;
 
index d471aee0c3a0b9e6294a300541263e82e9e89d8d..23aa84f100e6962f9a128954c60282f4854e0d2b 100644 (file)
@@ -286,7 +286,9 @@ int cg_shift_path(const char *cgroup, const char *cached_root, const char **ret_
 int cg_pid_get_path_shifted(pid_t pid, const char *cached_root, char **ret_cgroup);
 
 int cg_pid_get_session(pid_t pid, char **ret_session);
+int cg_pidref_get_session(const PidRef *pidref, char **ret);
 int cg_pid_get_owner_uid(pid_t pid, uid_t *ret_uid);
+int cg_pidref_get_owner_uid(const PidRef *pidref, uid_t *ret);
 int cg_pid_get_unit(pid_t pid, char **ret_unit);
 int cg_pidref_get_unit(const PidRef *pidref, char **ret);
 int cg_pid_get_user_unit(pid_t pid, char **ret_unit);
index 1d8f99cc6e58402510722f1a9fb316d902bceeb3..9fa3ddf9d13dd5c10ed086030c3bd42a15c1a7db 100644 (file)
@@ -212,8 +212,8 @@ TEST(proc) {
 
                 cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid.pid, &path);
                 cg_pid_get_path_shifted(pid.pid, NULL, &path_shifted);
-                cg_pid_get_owner_uid(pid.pid, &uid);
-                cg_pid_get_session(pid.pid, &session);
+                cg_pidref_get_owner_uid(&pid, &uid);
+                cg_pidref_get_session(&pid, &session);
                 cg_pid_get_unit(pid.pid, &unit);
                 cg_pid_get_user_unit(pid.pid, &user_unit);
                 cg_pid_get_machine_name(pid.pid, &machine);