]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: startup: call chroot() if needed in one place
authorValentine Krasnobaeva <vkrasnobaeva@haproxy.com>
Thu, 4 Jul 2024 13:51:12 +0000 (15:51 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 16 Oct 2024 20:02:39 +0000 (22:02 +0200)
There are two 'chroot' code blocks, both under quite same:

'if ((global.mode & (MODE_MWORKER|MODE_DAEMON...)...'

The first block serves to perform chroot only for process in the foreground
mode. The second comes after master-worker fork and allows to do chroot
in daemon and in worker modes.

Due to moving the master-worker fork in init() in some previous commit, the
second 'chroot' code block now is no longer under the 'if'. So, it is executed
for all modes, except MODE_MWORKER. Now in MODE_MWORKER process enters in its
wait polling loop just after forking a worker and it terminates almost
immediately, if it exits this loop.

Worker, daemon and process in a foreground mode will perform the chroot as
before, but now it will be done in a one place at main().

src/haproxy.c

index 8b2ba8934c6570be836311a5e2a64cb13e6385d4..79e417a6f159c1dec70c97ac83abcebd9cb3bbd2 100644 (file)
@@ -3502,21 +3502,6 @@ int main(int argc, char **argv)
                }
        }
 
-
-       if ((global.mode & (MODE_MWORKER|MODE_DAEMON)) == 0) {
-
-               /* chroot if needed */
-               if (global.chroot != NULL) {
-                       if (chroot(global.chroot) == -1 || chdir("/") == -1) {
-                               ha_alert("[%s.main()] Cannot chroot(%s).\n", argv[0], global.chroot);
-                               if (nb_oldpids)
-                                       tell_old_pids(SIGTTIN);
-                               protocol_unbind_all();
-                               exit(1);
-                       }
-               }
-       }
-
        if (nb_oldpids && !(global.mode & MODE_MWORKER_WAIT))
                nb_oldpids = tell_old_pids(oldpids_sig);