diff --git a/include/haproxy/global.h b/include/haproxy/global.h index b4a7a406b..ef6edc7f3 100644 --- a/include/haproxy/global.h +++ b/include/haproxy/global.h @@ -54,6 +54,8 @@ extern char **old_argv; extern const char *old_unixsocket; extern int daemon_fd[2]; extern int devnullfd; +extern int httpterm_mode; +extern struct cfgfile httpterm_cfg; struct proxy; struct server; diff --git a/src/haproxy.c b/src/haproxy.c index 4498367b3..42228630d 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -88,6 +88,7 @@ #include #include #include +#include #include #include #if defined(USE_LINUX_CAP) @@ -150,6 +151,8 @@ char **init_env; /* to keep current process env variables backup */ int pidfd = -1; /* FD to keep PID */ int daemon_fd[2] = {-1, -1}; /* pipe to communicate with parent process */ int devnullfd = -1; +int httpterm_mode; +struct cfgfile httpterm_cfg; static int stopped_tgroups; static int stop_detected; @@ -1439,6 +1442,7 @@ static void init_early(int argc, char **argv) exit(EXIT_FAILURE); } + httpterm_mode = !strncmp(progname, "httpterm", strlen("httpterm")); chunk_initlen(&global.log_tag, strdup(progname), len, len); } @@ -1489,6 +1493,9 @@ static void init_args(int argc, char **argv) exit(EXIT_FAILURE); } + if (httpterm_mode) + return; + /* skip program name and start */ argc--; argv++; while (argc > 0) { @@ -3256,6 +3263,8 @@ int main(int argc, char **argv) RUN_INITCALLS(STG_INIT); + if (httpterm_mode) + init_httpterm_cfg(argc, argv, &httpterm_cfg); /* Late init step: SSL crypto libs init and check, Lua lib init, ACL init, * set modes from cmdline and change dir, if this option is provided via * cmdline. @@ -3294,11 +3303,14 @@ int main(int argc, char **argv) /* backup initial process env, because parse_cfg() could modify it with * setenv/unsetenv/presetenv/resetenv keywords. */ - if (backup_env() != 0) + if (!httpterm_mode && backup_env() != 0) exit(EXIT_FAILURE); - /* parse conf in discovery mode and set modes from config */ - read_cfg_in_discovery_mode(argc, argv); + if (!httpterm_mode) + /* parse conf in discovery mode and set modes from config */ + read_cfg_in_discovery_mode(argc, argv); + else + parse_cfg(&httpterm_cfg); /* From this stage all runtime modes are known. So let's do below some * preparation steps and then let's apply all discovered modes. @@ -3341,7 +3353,7 @@ int main(int argc, char **argv) } /* Worker, daemon, foreground modes read the rest of the config */ - if (!master) { + if (!master && !httpterm_mode) { usermsgs_clr("config"); if (global.mode & MODE_MWORKER) { if (clean_env() != 0) {