diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-04-21 00:53:43 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-04-21 00:58:56 +0200 |
commit | 822d9b6e4c2f0dc1ebc606006dc52257f06850c5 (patch) | |
tree | e010b05d618c735d1514966e73f13c6ff23ce354 /src/libsystemd/sd-bus | |
parent | f887fa73eef0f505bd1e2d077b8eadbfd33a9c77 (diff) |
sd-bus: augmenting cgroups-based creds when we have the cgroup path already is free
Diffstat (limited to 'src/libsystemd/sd-bus')
-rw-r--r-- | src/libsystemd/sd-bus/bus-creds.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c index ea805f7fcd..1183bbe6a1 100644 --- a/src/libsystemd/sd-bus/bus-creds.c +++ b/src/libsystemd/sd-bus/bus-creds.c @@ -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) { |