summaryrefslogtreecommitdiff
path: root/src/libelogind
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-03-06 16:02:31 +0100
committerAndy Wingo <wingo@pobox.com>2016-03-06 16:02:31 +0100
commit162255186046fa7a5e82859b7dba5a7909ce6fc4 (patch)
tree8b81f2e7afac4df45ebca6e662d4d2b1d8635e5a /src/libelogind
parent6f5035f2db6ab7b4beae46c44b95e6a8b6d956b5 (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.c47
-rw-r--r--src/libelogind/sd-bus/sd-bus.c10
-rw-r--r--src/libelogind/sd-login/sd-login.c20
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 cd1c5e232..aea379d66 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 2cb1aafa2..35de5b051 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 cc0677bdf..8e2b7c1dc 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) {