summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorJan Palus <atler@pld-linux.org>2020-06-11 18:23:28 +0200
committerDaan De Meyer <daan.j.demeyer@gmail.com>2020-06-12 19:37:52 +0200
commitac4e03d45bcf4ad2e570cabdb218e9bac003cc80 (patch)
treefdaa478aaeb1fb7d1c0e83e81b7fb7637b84e574 /src/login
parenta2c703597699d040468d73160a1957065ea96e3a (diff)
downloadsystemd-ac4e03d45bcf4ad2e570cabdb218e9bac003cc80.tar.gz
login: filenames in /run/systemd/users are uids
Fixes: #16146
Diffstat (limited to 'src/login')
-rw-r--r--src/login/logind.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/login/logind.c b/src/login/logind.c
index 5a556f9ea4..dc746a2c9e 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -2,6 +2,7 @@
#include <errno.h>
#include <fcntl.h>
+#include <sys/types.h>
#include <unistd.h>
#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;