]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
login: filenames in /run/systemd/users are uids
authorJan Palus <atler@pld-linux.org>
Thu, 11 Jun 2020 16:23:28 +0000 (18:23 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 12 Jun 2020 17:37:52 +0000 (19:37 +0200)
Fixes: #16146
src/login/logind.c

index 5a556f9ea4ad074de26847b906e89b4dd6a81050..dc746a2c9edef1ff39227809a6fcd9f09fa69bff 100644 (file)
@@ -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;