]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: augmenting cgroups-based creds when we have the cgroup path already is free
authorLennart Poettering <lennart@poettering.net>
Mon, 20 Apr 2015 22:53:43 +0000 (00:53 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 20 Apr 2015 22:58:56 +0000 (00:58 +0200)
src/libsystemd/sd-bus/bus-creds.c

index ea805f7fcd1ae0f5c4674ba2e9690c0ad45fdab2..1183bbe6a1c01581e30deee4258cfc7f1621c8ca 100644 (file)
@@ -937,17 +937,22 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) {
 
         if (missing & (SD_BUS_CREDS_CGROUP|SD_BUS_CREDS_UNIT|SD_BUS_CREDS_USER_UNIT|SD_BUS_CREDS_SLICE|SD_BUS_CREDS_SESSION|SD_BUS_CREDS_OWNER_UID)) {
 
-                r = cg_pid_get_path(NULL, pid, &c->cgroup);
-                if (r < 0) {
-                        if (r != -EPERM && r != -EACCES)
-                                return r;
-                } else {
+                if (!c->cgroup) {
+                        r = cg_pid_get_path(NULL, pid, &c->cgroup);
+                        if (r < 0) {
+                                if (r != -EPERM && r != -EACCES)
+                                        return r;
+                        }
+                }
+
+                if (!c->cgroup_root) {
                         r = cg_get_root_path(&c->cgroup_root);
                         if (r < 0)
                                 return r;
+                }
 
+                if (c->cgroup)
                         c->mask |= missing & (SD_BUS_CREDS_CGROUP|SD_BUS_CREDS_UNIT|SD_BUS_CREDS_USER_UNIT|SD_BUS_CREDS_SLICE|SD_BUS_CREDS_SESSION|SD_BUS_CREDS_OWNER_UID);
-                }
         }
 
         if (missing & SD_BUS_CREDS_AUDIT_SESSION_ID) {