mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 17:17:06 +02:00
BUG/MEIDUM: startup: return to initial cwd only after check_config_validity()
In check_config_validity() we evaluate some sample fetch expressions (log-format, server rules, etc). These expressions may use external files like maps. If some particular 'default-path' was set in the global section before, it's no longer applied to resolve file pathes in check_config_validity(). parse_cfg() at the end of config parsing switches back to the initial cwd. This fixes the issue #2886. This patch should be backported in all stable versions since 2.4.0, including 2.4.0.
This commit is contained in:
parent
f98b5c4f59
commit
e900ef987e
@ -110,6 +110,7 @@ extern char *cursection;
|
|||||||
extern int non_global_section_parsed;
|
extern int non_global_section_parsed;
|
||||||
|
|
||||||
extern struct proxy *curproxy;
|
extern struct proxy *curproxy;
|
||||||
|
extern char initial_cwd[PATH_MAX];
|
||||||
|
|
||||||
int cfg_parse_global(const char *file, int linenum, char **args, int inv);
|
int cfg_parse_global(const char *file, int linenum, char **args, int inv);
|
||||||
int cfg_parse_listen(const char *file, int linenum, char **args, int inv);
|
int cfg_parse_listen(const char *file, int linenum, char **args, int inv);
|
||||||
|
@ -121,7 +121,7 @@ static enum default_path_mode {
|
|||||||
DEFAULT_PATH_ORIGIN, /* "origin": paths are relative to default_path_origin */
|
DEFAULT_PATH_ORIGIN, /* "origin": paths are relative to default_path_origin */
|
||||||
} default_path_mode;
|
} default_path_mode;
|
||||||
|
|
||||||
static char initial_cwd[PATH_MAX];
|
char initial_cwd[PATH_MAX];
|
||||||
static char current_cwd[PATH_MAX];
|
static char current_cwd[PATH_MAX];
|
||||||
|
|
||||||
/* List head of all known configuration keywords */
|
/* List head of all known configuration keywords */
|
||||||
@ -2668,11 +2668,6 @@ int parse_cfg(const struct cfgfile *cfg)
|
|||||||
err_code |= ERR_ALERT | ERR_FATAL | ERR_ABORT;
|
err_code |= ERR_ALERT | ERR_FATAL | ERR_ABORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*initial_cwd && chdir(initial_cwd) == -1) {
|
|
||||||
ha_alert("Impossible to get back to initial directory '%s' : %s\n", initial_cwd, strerror(errno));
|
|
||||||
err_code |= ERR_ALERT | ERR_FATAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
err:
|
err:
|
||||||
ha_free(&cfg_scope);
|
ha_free(&cfg_scope);
|
||||||
cursection = NULL;
|
cursection = NULL;
|
||||||
|
@ -2052,6 +2052,10 @@ static void step_init_2(int argc, char** argv)
|
|||||||
|
|
||||||
/* Note: global.nbthread will be initialized as part of this call */
|
/* Note: global.nbthread will be initialized as part of this call */
|
||||||
err_code |= check_config_validity();
|
err_code |= check_config_validity();
|
||||||
|
if (*initial_cwd && chdir(initial_cwd) == -1) {
|
||||||
|
ha_alert("Impossible to get back to initial directory '%s' : %s\n", initial_cwd, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* update the ready date to also account for the check time */
|
/* update the ready date to also account for the check time */
|
||||||
clock_update_date(0, 1);
|
clock_update_date(0, 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user