From bc9e9af13706dd89dd826c021f6a94f87e637abf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 30 May 2017 20:21:45 -0400 Subject: [PATCH] sd-login: translate -ENOMEDIUM to -ENODATA The -ENOMEDIUM return value was introduced in v232-1001-g2977724b09, ('core: make hybrid cgroup unified mode keep compat /sys/fs/cgroup/systemd hierarchy'), and would be returned by cg_pid_get_path_shifted(), but the documented and expected return value is -ENODATA. Let's just catch ENXIO/ENOMEDIUM and translate it to ENODATA in all cases. Complements 171f8f591ff27ebb5ff475b7a9d1f13a846c9331, fixes #6012. --- man/sd_pid_get_session.xml | 2 +- src/libsystemd/sd-login/sd-login.c | 22 +++++++++++++++------- src/libsystemd/sd-login/test-login.c | 9 +++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml index 0c135ba..14ebd53 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_session.xml @@ -285,7 +285,7 @@ - -BADF + -EBADF The specified socket file descriptor was invalid. diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index 25dff77..49573a7 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -62,7 +62,7 @@ _public_ int sd_pid_get_session(pid_t pid, char **session) { assert_return(session, -EINVAL); r = cg_pid_get_session(pid, session); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_unit(pid_t pid, char **unit) { @@ -72,7 +72,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) { assert_return(unit, -EINVAL); r = cg_pid_get_unit(pid, unit); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { @@ -82,39 +82,47 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { assert_return(unit, -EINVAL); r = cg_pid_get_user_unit(pid, unit); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_machine_name(pid_t pid, char **name) { + int r; assert_return(pid >= 0, -EINVAL); assert_return(name, -EINVAL); - return cg_pid_get_machine_name(pid, name); + r = cg_pid_get_machine_name(pid, name); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_slice(pid_t pid, char **slice) { + int r; assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); - return cg_pid_get_slice(pid, slice); + r = cg_pid_get_slice(pid, slice); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_user_slice(pid_t pid, char **slice) { + int r; assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); - return cg_pid_get_user_slice(pid, slice); + r = cg_pid_get_user_slice(pid, slice); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { + int r; assert_return(pid >= 0, -EINVAL); assert_return(uid, -EINVAL); - return cg_pid_get_owner_uid(pid, uid); + r = cg_pid_get_owner_uid(pid, uid); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_cgroup(pid_t pid, char **cgroup) { diff --git a/src/libsystemd/sd-login/test-login.c b/src/libsystemd/sd-login/test-login.c index 6a51ae6..bc8488c 100644 --- a/src/libsystemd/sd-login/test-login.c +++ b/src/libsystemd/sd-login/test-login.c @@ -61,14 +61,15 @@ static void test_login(void) { r = sd_pid_get_unit(0, &unit); assert_se(r >= 0 || r == -ENODATA); - log_info("sd_pid_get_unit(0, …) → \"%s\"", unit); + log_info("sd_pid_get_unit(0, …) → \"%s\"", strna(unit)); r = sd_pid_get_user_unit(0, &user_unit); assert_se(r >= 0 || r == -ENODATA); - log_info("sd_pid_get_user_unit(0, …) → \"%s\"", user_unit); + log_info("sd_pid_get_user_unit(0, …) → \"%s\"", strna(user_unit)); - assert_se(sd_pid_get_slice(0, &slice) >= 0); - log_info("sd_pid_get_slice(0, …) → \"%s\"", slice); + r = sd_pid_get_slice(0, &slice); + assert_se(r >= 0 || r == -ENODATA); + log_info("sd_pid_get_slice(0, …) → \"%s\"", strna(slice)); r = sd_pid_get_session(0, &session); if (r < 0) { -- 2.7.4