summaryrefslogtreecommitdiff
path: root/src/libelogind
diff options
context:
space:
mode:
authorSven Eden <yamakuzure@gmx.net>2017-02-10 14:09:39 +0100
committerSven Eden <yamakuzure@gmx.net>2017-03-14 10:23:13 +0100
commit9eb822a5a6b67eb82909f0d68213afbfcee6e93e (patch)
tree2a1ef0029f5d480065b62a3e72309b553b327d8a /src/libelogind
parent2055a4de39bdf062645a7a58b50aae029df80857 (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.c9
-rw-r--r--src/libelogind/sd-bus/bus-internal.h2
-rw-r--r--src/libelogind/sd-bus/sd-bus.c26
-rw-r--r--src/libelogind/sd-login/sd-login.c65
4 files changed, 97 insertions, 5 deletions
diff --git a/src/libelogind/sd-bus/bus-creds.c b/src/libelogind/sd-bus/bus-creds.c
index cca0855be..58436d630 100644
--- a/src/libelogind/sd-bus/bus-creds.c
+++ b/src/libelogind/sd-bus/bus-creds.c
@@ -555,7 +555,13 @@ _public_ int sd_bus_creds_get_owner_uid(sd_bus_creds *c, uid_t *uid) {
if (r < 0)
return r;
+/// elogind does not support systemd slices
+#if 0
return cg_path_get_owner_uid(shifted, uid);
+#else
+ *uid = c->uid;
+ return 0;
+#endif // 0
}
_public_ int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline) {
@@ -577,8 +583,6 @@ _public_ int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline) {
return 0;
}
-/// UNNEEDED by elogind
-#if 0
_public_ int sd_bus_creds_get_audit_session_id(sd_bus_creds *c, uint32_t *sessionid) {
assert_return(c, -EINVAL);
assert_return(sessionid, -EINVAL);
@@ -592,7 +596,6 @@ _public_ int sd_bus_creds_get_audit_session_id(sd_bus_creds *c, uint32_t *sessio
*sessionid = c->audit_session_id;
return 0;
}
-#endif // 0
_public_ int sd_bus_creds_get_audit_login_uid(sd_bus_creds *c, uid_t *uid) {
assert_return(c, -EINVAL);
diff --git a/src/libelogind/sd-bus/bus-internal.h b/src/libelogind/sd-bus/bus-internal.h
index efee735b9..e0d7c9ee7 100644
--- a/src/libelogind/sd-bus/bus-internal.h
+++ b/src/libelogind/sd-bus/bus-internal.h
@@ -384,7 +384,7 @@ char *bus_address_escape(const char *v);
_cleanup_bus_unref_ _unused_ sd_bus *_dont_destroy_##bus = sd_bus_ref(bus)
int bus_set_address_system(sd_bus *bus);
-int bus_set_address_user(sd_bus *bus);
+// UNNEEDED int bus_set_address_user(sd_bus *bus);
int bus_set_address_system_remote(sd_bus *b, const char *host);
int bus_set_address_system_machine(sd_bus *b, const char *machine);
diff --git a/src/libelogind/sd-bus/sd-bus.c b/src/libelogind/sd-bus/sd-bus.c
index fc4f8f3f2..2ccfacbdf 100644
--- a/src/libelogind/sd-bus/sd-bus.c
+++ b/src/libelogind/sd-bus/sd-bus.c
@@ -1162,15 +1162,21 @@ _public_ int sd_bus_open(sd_bus **ret) {
if (e) {
if (streq(e, "system"))
return sd_bus_open_system(ret);
+/// elogind does not support systemd units
+#if 0
else if (STR_IN_SET(e, "session", "user"))
return sd_bus_open_user(ret);
+#endif // 0
}
e = secure_getenv("DBUS_STARTER_ADDRESS");
if (!e) {
+/// elogind does not support systemd units
+#if 0
if (cg_pid_get_owner_uid(0, NULL) >= 0)
return sd_bus_open_user(ret);
else
+#endif // 0
return sd_bus_open_system(ret);
}
@@ -1248,6 +1254,8 @@ fail:
return r;
}
+/// elogind can not open/use a user bus
+#if 0
int bus_set_address_user(sd_bus *b) {
const char *e;
uid_t uid;
@@ -1280,8 +1288,11 @@ int bus_set_address_user(sd_bus *b) {
return 0;
}
+#endif // 0
_public_ int sd_bus_open_user(sd_bus **ret) {
+/// elogind does not support user buses
+#if 0
sd_bus *b;
int r;
@@ -1312,6 +1323,9 @@ _public_ int sd_bus_open_user(sd_bus **ret) {
fail:
bus_free(b);
return r;
+#else
+ return sd_bus_open_system(ret);
+#endif // 0
}
int bus_set_address_system_remote(sd_bus *b, const char *host) {
@@ -3382,9 +3396,14 @@ _public_ int sd_bus_default_system(sd_bus **ret) {
}
_public_ int sd_bus_default_user(sd_bus **ret) {
+/// elogind does not support user buses
+#if 0
static thread_local sd_bus *default_user_bus = NULL;
return bus_default(sd_bus_open_user, &default_user_bus, ret);
+#else
+ return sd_bus_default_system(ret);
+#endif // 0
}
_public_ int sd_bus_default(sd_bus **ret) {
@@ -3401,8 +3420,11 @@ _public_ int sd_bus_default(sd_bus **ret) {
if (e) {
if (streq(e, "system"))
return sd_bus_default_system(ret);
+/// elogind does not support systemd units
+#if 0
else if (STR_IN_SET(e, "user", "session"))
return sd_bus_default_user(ret);
+#endif // 0
}
/* No type is specified, so we have not other option than to
@@ -3417,10 +3439,12 @@ _public_ int sd_bus_default(sd_bus **ret) {
/* Finally, if nothing is set use the cached connection for
* the right scope */
-
+/// elogind does not support systemd units
+#if 0
if (cg_pid_get_owner_uid(0, NULL) >= 0)
return sd_bus_default_user(ret);
else
+#endif // 0
return sd_bus_default_system(ret);
}
diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c
index f4dd7feec..4f625ea33 100644
--- a/src/libelogind/sd-login/sd-login.c
+++ b/src/libelogind/sd-login/sd-login.c
@@ -58,7 +58,12 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
assert_return(pid >= 0, -EINVAL);
assert_return(unit, -EINVAL);
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_unit(pid, unit);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
@@ -66,7 +71,12 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
assert_return(pid >= 0, -EINVAL);
assert_return(unit, -EINVAL);
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_user_unit(pid, unit);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
@@ -74,7 +84,12 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
assert_return(pid >= 0, -EINVAL);
assert_return(name, -EINVAL);
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_machine_name(pid, name);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
@@ -82,7 +97,12 @@ _public_ int sd_pid_get_slice(pid_t pid, char **slice) {
assert_return(pid >= 0, -EINVAL);
assert_return(slice, -EINVAL);
+/// elogind does not support systemd slices
+#if 0
return cg_pid_get_slice(pid, slice);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_user_slice(pid_t pid, char **slice) {
@@ -90,7 +110,12 @@ _public_ int sd_pid_get_user_slice(pid_t pid, char **slice) {
assert_return(pid >= 0, -EINVAL);
assert_return(slice, -EINVAL);
+/// elogind does not support systemd slices
+#if 0
return cg_pid_get_user_slice(pid, slice);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
@@ -98,7 +123,12 @@ _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
assert_return(pid >= 0, -EINVAL);
assert_return(uid, -EINVAL);
+/// elogind does not support systemd slices
+#if 0
return cg_pid_get_owner_uid(pid, uid);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_pid_get_cgroup(pid_t pid, char **cgroup) {
@@ -138,7 +168,12 @@ _public_ int sd_peer_get_session(int fd, char **session) {
if (r < 0)
return r;
+/// elogind does not support systemd scopes
+#if 0
return cg_pid_get_session(ucred.pid, session);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_owner_uid(int fd, uid_t *uid) {
@@ -152,7 +187,12 @@ _public_ int sd_peer_get_owner_uid(int fd, uid_t *uid) {
if (r < 0)
return r;
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_owner_uid(ucred.pid, uid);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_unit(int fd, char **unit) {
@@ -166,7 +206,12 @@ _public_ int sd_peer_get_unit(int fd, char **unit) {
if (r < 0)
return r;
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_unit(ucred.pid, unit);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_user_unit(int fd, char **unit) {
@@ -180,7 +225,12 @@ _public_ int sd_peer_get_user_unit(int fd, char **unit) {
if (r < 0)
return r;
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_user_unit(ucred.pid, unit);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_machine_name(int fd, char **machine) {
@@ -194,7 +244,12 @@ _public_ int sd_peer_get_machine_name(int fd, char **machine) {
if (r < 0)
return r;
+/// elogind does not support systemd units
+#if 0
return cg_pid_get_machine_name(ucred.pid, machine);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_slice(int fd, char **slice) {
@@ -208,7 +263,12 @@ _public_ int sd_peer_get_slice(int fd, char **slice) {
if (r < 0)
return r;
+/// elogind does not support systemd slices
+#if 0
return cg_pid_get_slice(ucred.pid, slice);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_user_slice(int fd, char **slice) {
@@ -222,7 +282,12 @@ _public_ int sd_peer_get_user_slice(int fd, char **slice) {
if (r < 0)
return r;
+/// elogind does not support systemd slices
+#if 0
return cg_pid_get_user_slice(ucred.pid, slice);
+#else
+ return -ESRCH;
+#endif // 0
}
_public_ int sd_peer_get_cgroup(int fd, char **cgroup) {