]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
userdbd: make use of FORK_CLOSE_ALL_FDS + FORK_REOPEN_LOG where we can
authorLennart Poettering <lennart@poettering.net>
Wed, 15 Mar 2023 14:01:11 +0000 (15:01 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 15 Mar 2023 14:57:25 +0000 (15:57 +0100)
src/userdb/userdbd-manager.c

index 81f327ef2e62462afffbbd02729c62270053b5a7..4e70f4259b2e139e2e1ea3254612b3d6075e095e 100644 (file)
@@ -156,23 +156,18 @@ static int start_one_worker(Manager *m) {
 
         fixed = set_size(m->workers_fixed) < USERDB_WORKERS_MIN;
 
-        r = safe_fork("(sd-worker)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
+        r = safe_fork_full(
+                        "(sd-worker)",
+                        /* stdio_fds= */ NULL,
+                        &m->listen_fd, 1,
+                        FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_REOPEN_LOG|FORK_LOG|FORK_CLOSE_ALL_FDS,
+                        &pid);
         if (r < 0)
                 return log_error_errno(r, "Failed to fork new worker child: %m");
         if (r == 0) {
                 char pids[DECIMAL_STR_MAX(pid_t)];
                 /* Child */
 
-                log_close();
-
-                r = close_all_fds(&m->listen_fd, 1);
-                if (r < 0) {
-                        log_error_errno(r, "Failed to close fds in child: %m");
-                        _exit(EXIT_FAILURE);
-                }
-
-                log_open();
-
                 if (m->listen_fd == 3) {
                         r = fd_cloexec(3, false);
                         if (r < 0) {