From: Sven Eden Date: Tue, 9 Jan 2018 17:52:14 +0000 (+0100) Subject: Prep 235: Enabled sd_bus_creds_get_slice(), sd_bus_creds_get_user_slice(), sd_peer_ge... X-Git-Tag: v235.1~6 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=1355c7e45cd8ac0f4053ae00111a4d2e49795812;p=elogind.git Prep 235: Enabled sd_bus_creds_get_slice(), sd_bus_creds_get_user_slice(), sd_peer_get_user_slice() and sd_pid_get_user_slice() to try to work with eloginds session id to user mapping. --- diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index d909e2990..41a33899f 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -1936,19 +1936,29 @@ int cg_pid_get_slice(pid_t pid, char **slice) { return cg_path_get_slice(cgroup, slice); } -#if 0 /// UNNEEDED by elogind int cg_path_get_user_slice(const char *p, char **slice) { +#if 0 /// UNNEEDED by elogind const char *t; +#endif // 0 assert(p); assert(slice); +#if 0 // nothing to skip in elogind t = skip_user_prefix(p); if (!t) return -ENXIO; +#endif // 0 +#if 0 /// UNNEEDED by elogind /* And now it looks pretty much the same as for a system * slice, so let's just use the same parser from here on. */ return cg_path_get_slice(t, slice); +#else + /* In elogind there is nothing to skip, we can use the path + * directly. Generally speaking this is always a session id + * to user mapping. */ + return cg_path_get_slice(p, slice); +#endif // 0 } int cg_pid_get_user_slice(pid_t pid, char **slice) { @@ -1963,7 +1973,6 @@ int cg_pid_get_user_slice(pid_t pid, char **slice) { return cg_path_get_user_slice(cgroup, slice); } -#endif // 0 char *cg_escape(const char *p) { bool need_prefix = false; diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h index 419d5f4bd..8bf232c13 100644 --- a/src/basic/cgroup-util.h +++ b/src/basic/cgroup-util.h @@ -213,9 +213,7 @@ int cg_path_get_user_unit(const char *path, char **unit); int cg_path_get_machine_name(const char *path, char **machine); #endif // 0 int cg_path_get_slice(const char *path, char **slice); -#if 0 /// UNNEEDED by elogind int cg_path_get_user_slice(const char *path, char **slice); -#endif // 0 int cg_shift_path(const char *cgroup, const char *cached_root, const char **shifted); int cg_pid_get_path_shifted(pid_t pid, const char *cached_root, char **cgroup); @@ -228,9 +226,9 @@ int cg_pid_get_user_unit(pid_t pid, char **unit); int cg_pid_get_machine_name(pid_t pid, char **machine); #endif // 0 int cg_pid_get_slice(pid_t pid, char **slice); -#if 0 /// UNNEEDED by elogind int cg_pid_get_user_slice(pid_t pid, char **slice); +#if 0 /// UNNEEDED by elogind int cg_path_decode_unit(const char *cgroup, char **unit); #endif // 0 diff --git a/src/libelogind/libelogind.sym b/src/libelogind/libelogind.sym index f1537d5e9..bc5a53daa 100644 --- a/src/libelogind/libelogind.sym +++ b/src/libelogind/libelogind.sym @@ -363,9 +363,9 @@ global: sd_bus_creds_get_cmdline; sd_bus_creds_get_cgroup; /* sd_bus_creds_get_unit; */ - /* sd_bus_creds_get_slice; */ + sd_bus_creds_get_slice; /* sd_bus_creds_get_user_unit; */ - /* sd_bus_creds_get_user_slice; */ + sd_bus_creds_get_user_slice; sd_bus_creds_get_session; sd_bus_creds_get_owner_uid; sd_bus_creds_has_effective_cap; diff --git a/src/libelogind/sd-bus/bus-creds.c b/src/libelogind/sd-bus/bus-creds.c index 28bbdf0da..fcc3b5016 100644 --- a/src/libelogind/sd-bus/bus-creds.c +++ b/src/libelogind/sd-bus/bus-creds.c @@ -444,6 +444,7 @@ _public_ int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **ret) { *ret = c->user_unit; return 0; } +#endif // 0 _public_ int sd_bus_creds_get_slice(sd_bus_creds *c, const char **ret) { int r; @@ -498,7 +499,6 @@ _public_ int sd_bus_creds_get_user_slice(sd_bus_creds *c, const char **ret) { *ret = c->user_slice; return 0; } -#endif // 0 _public_ int sd_bus_creds_get_session(sd_bus_creds *c, const char **ret) { int r; diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c index 0900f0fe6..f7692cd82 100644 --- a/src/libelogind/sd-login/sd-login.c +++ b/src/libelogind/sd-login/sd-login.c @@ -124,19 +124,13 @@ _public_ int sd_pid_get_slice(pid_t pid, char **slice) { } _public_ int sd_pid_get_user_slice(pid_t pid, char **slice) { -#if 0 /// UNNEEDED by elogind int r; -#endif // 0 assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); -#if 0 /// elogind does not support systemd slices r = cg_pid_get_user_slice(pid, slice); return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; -#else - return -ESRCH; -#endif // 0 } _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { @@ -290,11 +284,7 @@ _public_ int sd_peer_get_user_slice(int fd, char **slice) { if (r < 0) return r; -#if 0 /// elogind does not support systemd slices return cg_pid_get_user_slice(ucred.pid, slice); -#else - return -ESRCH; -#endif // 0 } _public_ int sd_peer_get_cgroup(int fd, char **cgroup) { diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h index e75374dbb..9b507eefb 100644 --- a/src/systemd/sd-bus.h +++ b/src/systemd/sd-bus.h @@ -360,10 +360,12 @@ int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline); int sd_bus_creds_get_cgroup(sd_bus_creds *c, const char **cgroup); #if 0 /** unsupported by elogind **/ int sd_bus_creds_get_unit(sd_bus_creds *c, const char **unit); +#endif // 0 int sd_bus_creds_get_slice(sd_bus_creds *c, const char **slice); +#if 0 /// UNNEEDED by elogind int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **unit); -int sd_bus_creds_get_user_slice(sd_bus_creds *c, const char **slice); #endif /** 0 **/ +int sd_bus_creds_get_user_slice(sd_bus_creds *c, const char **slice); int sd_bus_creds_get_session(sd_bus_creds *c, const char **session); int sd_bus_creds_get_owner_uid(sd_bus_creds *c, uid_t *uid); int sd_bus_creds_has_effective_cap(sd_bus_creds *c, int capability);