diff --git a/src/cfgparse.c b/src/cfgparse.c index e0e655ba2..70c40fd7e 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -2074,6 +2074,7 @@ next_line: if (!*args[check_arg]) { static int warned_empty; size_t newpos; + int suggest = 0; /* if an empty arg was found, its pointer should be in , except * for rare cases such as '\x00' etc. We need to check errptr in any case @@ -2085,6 +2086,9 @@ next_line: if (newpos >= strlen(line)) newpos = 0; // impossible to report anything, start at the beginning. errptr = line + newpos; + } else if (isalnum((uchar)*errptr) || *errptr == '_') { + /* looks like an environment variable */ + suggest = 1; } /* sanitize input line in-place */ @@ -2096,6 +2100,21 @@ next_line: ("Aborting to prevent all subsequent arguments from being silently ignored. " "If this is caused by an environment variable expansion, please have a look at section " "2.3 of the configuration manual to find solutions to address this.\n")); + + if (suggest) { + const char *end = errptr; + struct ist alt; + + while (isalnum((uchar)*end) || *end == '_') + end++; + + if (end > errptr) { + alt = env_suggest(ist2(errptr, end - errptr)); + if (isttest(alt)) + ha_notice("Hint: maybe you meant %.*s instead ?\n", (int)istlen(alt), istptr(alt)); + } + } + err_code |= ERR_ALERT | ERR_FATAL; fatal++; goto next_line;