From: Jan Palus Date: Thu, 11 Jun 2020 16:23:28 +0000 (+0200) Subject: login: filenames in /run/systemd/users are uids X-Git-Tag: v246-rc1~159 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac4e03d45bcf4ad2e570cabdb218e9bac003cc80;p=thirdparty%2Fsystemd.git login: filenames in /run/systemd/users are uids Fixes: #16146 --- diff --git a/src/login/logind.c b/src/login/logind.c index 5a556f9ea4a..dc746a2c9ed 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -2,6 +2,7 @@ #include #include +#include #include #include "sd-daemon.h" @@ -33,6 +34,7 @@ #include "strv.h" #include "terminal-util.h" #include "udev-util.h" +#include "user-util.h" static Manager* manager_unref(Manager *m); DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_unref); @@ -328,11 +330,18 @@ static int manager_enumerate_users(Manager *m) { FOREACH_DIRENT(de, d, return -errno) { User *u; + uid_t uid; if (!dirent_is_file(de)) continue; - k = manager_add_user_by_name(m, de->d_name, &u); + k = parse_uid(de->d_name, &uid); + if (k < 0) { + r = log_warning_errno(k, "Failed to parse filename /run/systemd/users/%s as UID.", de->d_name); + continue; + } + + k = manager_add_user_by_uid(m, uid, &u); if (k < 0) { r = log_warning_errno(k, "Failed to add user by file name %s, ignoring: %m", de->d_name); continue;