diff options
author | Sven Eden <yamakuzure@gmx.net> | 2017-02-10 14:09:39 +0100 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-03-14 10:23:13 +0100 |
commit | 9eb822a5a6b67eb82909f0d68213afbfcee6e93e (patch) | |
tree | 2a1ef0029f5d480065b62a3e72309b553b327d8a /src/libelogind | |
parent | 2055a4de39bdf062645a7a58b50aae029df80857 (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 | 9 | ||||
-rw-r--r-- | src/libelogind/sd-bus/bus-internal.h | 2 | ||||
-rw-r--r-- | src/libelogind/sd-bus/sd-bus.c | 26 | ||||
-rw-r--r-- | src/libelogind/sd-login/sd-login.c | 65 |
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) { |