diff options
author | Andy Wingo <wingo@pobox.com> | 2016-03-06 16:02:31 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-03-06 16:02:31 +0100 |
commit | 162255186046fa7a5e82859b7dba5a7909ce6fc4 (patch) | |
tree | 8b81f2e7afac4df45ebca6e662d4d2b1d8635e5a /src/libelogind | |
parent | 6f5035f2db6ab7b4beae46c44b95e6a8b6d956b5 (diff) |
Classify processes from sessions into cgroups
Create a private cgroup tree associated with no controllers, and use it
to map PIDs to sessions. Since we use our own path structure, remove
internal cgroup-related helpers that interpret the cgroup path structure
to pull out users, slices, and scopes.
Diffstat (limited to 'src/libelogind')
-rw-r--r-- | src/libelogind/sd-bus/bus-creds.c | 47 | ||||
-rw-r--r-- | src/libelogind/sd-bus/sd-bus.c | 10 | ||||
-rw-r--r-- | src/libelogind/sd-login/sd-login.c | 20 |
3 files changed, 19 insertions, 58 deletions
diff --git a/src/libelogind/sd-bus/bus-creds.c b/src/libelogind/sd-bus/bus-creds.c index cd1c5e232a..aea379d669 100644 --- a/src/libelogind/sd-bus/bus-creds.c +++ b/src/libelogind/sd-bus/bus-creds.c @@ -358,8 +358,6 @@ _public_ int sd_bus_creds_get_cgroup(sd_bus_creds *c, const char **ret) { } _public_ int sd_bus_creds_get_unit(sd_bus_creds *c, const char **ret) { - int r; - assert_return(c, -EINVAL); assert_return(ret, -EINVAL); @@ -368,25 +366,14 @@ _public_ int sd_bus_creds_get_unit(sd_bus_creds *c, const char **ret) { assert(c->cgroup); - if (!c->unit) { - const char *shifted; - - r = cg_shift_path(c->cgroup, c->cgroup_root, &shifted); - if (r < 0) - return r; - - r = cg_path_get_unit(shifted, (char**) &c->unit); - if (r < 0) - return r; - } + if (!c->unit) + return -ESRCH; *ret = c->unit; return 0; } _public_ int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **ret) { - int r; - assert_return(c, -EINVAL); assert_return(ret, -EINVAL); @@ -395,25 +382,14 @@ _public_ int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **ret) { assert(c->cgroup); - if (!c->user_unit) { - const char *shifted; - - r = cg_shift_path(c->cgroup, c->cgroup_root, &shifted); - if (r < 0) - return r; - - r = cg_path_get_user_unit(shifted, (char**) &c->user_unit); - if (r < 0) - return r; - } + if (!c->user_unit) + return -ESRCH; *ret = c->user_unit; return 0; } _public_ int sd_bus_creds_get_slice(sd_bus_creds *c, const char **ret) { - int r; - assert_return(c, -EINVAL); assert_return(ret, -EINVAL); @@ -422,17 +398,8 @@ _public_ int sd_bus_creds_get_slice(sd_bus_creds *c, const char **ret) { assert(c->cgroup); - if (!c->slice) { - const char *shifted; - - r = cg_shift_path(c->cgroup, c->cgroup_root, &shifted); - if (r < 0) - return r; - - r = cg_path_get_slice(shifted, (char**) &c->slice); - if (r < 0) - return r; - } + if (!c->slice) + return -ESRCH; *ret = c->slice; return 0; @@ -481,7 +448,7 @@ _public_ int sd_bus_creds_get_owner_uid(sd_bus_creds *c, uid_t *uid) { if (r < 0) return r; - return cg_path_get_owner_uid(shifted, uid); + return -ESRCH; } _public_ int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline) { diff --git a/src/libelogind/sd-bus/sd-bus.c b/src/libelogind/sd-bus/sd-bus.c index 2cb1aafa2b..35de5b051e 100644 --- a/src/libelogind/sd-bus/sd-bus.c +++ b/src/libelogind/sd-bus/sd-bus.c @@ -1124,10 +1124,7 @@ _public_ int sd_bus_open(sd_bus **ret) { e = secure_getenv("DBUS_STARTER_ADDRESS"); if (!e) { - if (cg_pid_get_owner_uid(0, NULL) >= 0) - return sd_bus_open_user(ret); - else - return sd_bus_open_system(ret); + return sd_bus_open_system(ret); } r = sd_bus_new(&b); @@ -3327,10 +3324,7 @@ _public_ int sd_bus_default(sd_bus **ret) { /* Finally, if nothing is set use the cached connection for * the right scope */ - if (cg_pid_get_owner_uid(0, NULL) >= 0) - return sd_bus_default_user(ret); - else - return sd_bus_default_system(ret); + return sd_bus_default_system(ret); } _public_ int sd_bus_get_tid(sd_bus *b, pid_t *tid) { diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c index cc0677bdf2..8e2b7c1dc7 100644 --- a/src/libelogind/sd-login/sd-login.c +++ b/src/libelogind/sd-login/sd-login.c @@ -46,7 +46,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) { assert_return(pid >= 0, -EINVAL); assert_return(unit, -EINVAL); - return cg_pid_get_unit(pid, unit); + return -ESRCH; } _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { @@ -54,7 +54,7 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { assert_return(pid >= 0, -EINVAL); assert_return(unit, -EINVAL); - return cg_pid_get_user_unit(pid, unit); + return -ESRCH; } _public_ int sd_pid_get_machine_name(pid_t pid, char **name) { @@ -62,7 +62,7 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) { assert_return(pid >= 0, -EINVAL); assert_return(name, -EINVAL); - return cg_pid_get_machine_name(pid, name); + return -ESRCH; } _public_ int sd_pid_get_slice(pid_t pid, char **slice) { @@ -70,7 +70,7 @@ _public_ int sd_pid_get_slice(pid_t pid, char **slice) { assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); - return cg_pid_get_slice(pid, slice); + return -ESRCH; } _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { @@ -78,7 +78,7 @@ _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { assert_return(pid >= 0, -EINVAL); assert_return(uid, -EINVAL); - return cg_pid_get_owner_uid(pid, uid); + return -ESRCH; } _public_ int sd_peer_get_session(int fd, char **session) { @@ -106,7 +106,7 @@ _public_ int sd_peer_get_owner_uid(int fd, uid_t *uid) { if (r < 0) return r; - return cg_pid_get_owner_uid(ucred.pid, uid); + return -ESRCH; } _public_ int sd_peer_get_unit(int fd, char **unit) { @@ -120,7 +120,7 @@ _public_ int sd_peer_get_unit(int fd, char **unit) { if (r < 0) return r; - return cg_pid_get_unit(ucred.pid, unit); + return -ESRCH; } _public_ int sd_peer_get_user_unit(int fd, char **unit) { @@ -134,7 +134,7 @@ _public_ int sd_peer_get_user_unit(int fd, char **unit) { if (r < 0) return r; - return cg_pid_get_user_unit(ucred.pid, unit); + return -ESRCH; } _public_ int sd_peer_get_machine_name(int fd, char **machine) { @@ -148,7 +148,7 @@ _public_ int sd_peer_get_machine_name(int fd, char **machine) { if (r < 0) return r; - return cg_pid_get_machine_name(ucred.pid, machine); + return -ESRCH; } _public_ int sd_peer_get_slice(int fd, char **slice) { @@ -162,7 +162,7 @@ _public_ int sd_peer_get_slice(int fd, char **slice) { if (r < 0) return r; - return cg_pid_get_slice(ucred.pid, slice); + return -ESRCH; } static int file_of_uid(uid_t uid, char **p) { |