]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
userdbd: reverse which path is a socket and which a symlink
authorLennart Poettering <lennart@poettering.net>
Thu, 6 May 2021 14:41:05 +0000 (16:41 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 7 May 2021 14:43:43 +0000 (16:43 +0200)
userdbd listens on "two" sockets, that are actually the same: one is a
real AF_UNIX socket in the fs, and the other is a symlink to it.

So far, when userdbd was started from the command line it would make one
a symlink and the other a real socket, but when invoked via unit files
they'd be swapped, i.e. the other would be a symlink and the one a real
socket.

Let's bring this in line.

Since the "io.systemd.Multiplexer" is our main interface, let's make it
the one exposed as socket, and then make "io.systemd.NameServiceSwitch"
a symlink to it. Or in other words, let's adjust the C code to match the
unit file.

src/userdb/userdbd-manager.c

index f8d315ce2de3b2d6015dcaa9b6f76a4073390b4b..3fd82255ac63b099a311083b05ca808399f4191a 100644 (file)
@@ -267,7 +267,7 @@ int manager_startup(Manager *m) {
         else {
                 union sockaddr_union sockaddr = {
                         .un.sun_family = AF_UNIX,
-                        .un.sun_path = "/run/systemd/userdb/io.systemd.NameServiceSwitch",
+                        .un.sun_path = "/run/systemd/userdb/io.systemd.Multiplexer",
                 };
 
                 r = mkdir_p("/run/systemd/userdb", 0755);
@@ -284,7 +284,8 @@ int manager_startup(Manager *m) {
                         if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0)
                                 return log_error_errno(errno, "Failed to bind socket: %m");
 
-                r = symlink_idempotent("io.systemd.NameServiceSwitch", "/run/systemd/userdb/io.systemd.Multiplexer", false);
+                r = symlink_idempotent("io.systemd.Multiplexer",
+                                       "/run/systemd/userdb/io.systemd.NameServiceSwitch", false);
                 if (r < 0)
                         return log_error_errno(r, "Failed to bind io.systemd.Multiplexer: %m");