diff --git a/doc/configuration.txt b/doc/configuration.txt index 4f306d73b..f597a8c60 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -727,13 +727,16 @@ shell. Variable names can contain alphanumerical characters or the character underscore ("_") but should not start with a digit. If the variable contains a list of several values separated by spaces, it can be expanded as individual arguments by enclosing the variable with braces and appending the suffix '[*]' -before the closing brace. +before the closing brace. It is also possible to specify a default value to +use when the variable is not set, by appending that value after a dash '-' +next to the variable name. Note that the default value only replaces non +existing variables, not empty ones. Example: bind "fd@${FD_APP1}" - log "${LOCAL_SYSLOG}:514" local0 notice # send to local server + log "${LOCAL_SYSLOG-127.0.0.1}:514" local0 notice # send to local server user "$HAPROXY_USER" diff --git a/src/tools.c b/src/tools.c index 8fc67163a..5d8483d4e 100644 --- a/src/tools.c +++ b/src/tools.c @@ -5440,13 +5440,27 @@ uint32_t parse_line(char *in, char *out, size_t *outlen, char **args, int *nbarg } if (brace) { - if (*in != '}') { + if (*in == '-') { + /* default value starts just after the '-' */ + if (!value) + value = in + 1; + + while (*in && *in != '}') + in++; + if (!*in) + goto no_brace; + *in = 0; // terminate the default value + } + else if (*in != '}') { + no_brace: /* unmatched brace */ err |= PARSE_ERR_BRACE; if (errptr) *errptr = brace; goto leave; } + + /* brace found, skip it */ in++; brace = NULL; }