diff --git a/include/common/cfgparse.h b/include/common/cfgparse.h index c5777f98b..35e5614e9 100644 --- a/include/common/cfgparse.h +++ b/include/common/cfgparse.h @@ -36,7 +36,8 @@ struct cfg_keyword { int section; /* section type for this keyword */ const char *kw; /* the keyword itself */ - int (*parse)(char **args, /* command line and arguments */ + int (*parse)( /* 0=OK, <0=Alert, >0=Warning */ + char **args, /* command line and arguments */ int section_type, /* current section CFG_{GLOBAL|LISTEN} */ struct proxy *curpx, /* current proxy (NULL in GLOBAL) */ struct proxy *defpx, /* default proxy (NULL in GLOBAL) */ diff --git a/src/cfgparse.c b/src/cfgparse.c index af29a4798..91e6c558c 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -501,6 +501,7 @@ int cfg_parse_global(const char *file, int linenum, char **args, int inv) else { struct cfg_kw_list *kwl; int index; + int rc; list_for_each_entry(kwl, &cfg_keywords.list, list) { for (index = 0; kwl->kw[index].kw != NULL; index++) { @@ -510,10 +511,15 @@ int cfg_parse_global(const char *file, int linenum, char **args, int inv) /* prepare error message just in case */ snprintf(trash, sizeof(trash), "error near '%s' in '%s' section", args[0], "global"); - if (kwl->kw[index].parse(args, CFG_GLOBAL, NULL, NULL, trash, sizeof(trash)) < 0) { + rc = kwl->kw[index].parse(args, CFG_GLOBAL, NULL, NULL, trash, sizeof(trash)); + if (rc < 0) { Alert("parsing [%s:%d] : %s\n", file, linenum, trash); return -1; } + else if (rc > 0) { + Warning("parsing [%s:%d] : %s\n", file, linenum, trash); + return 0; + } return 0; } } @@ -2680,10 +2686,15 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv) /* prepare error message just in case */ snprintf(trash, sizeof(trash), "error near '%s' in %s section", args[0], cursection); - if (kwl->kw[index].parse(args, CFG_LISTEN, curproxy, &defproxy, trash, sizeof(trash)) < 0) { + rc = kwl->kw[index].parse(args, CFG_LISTEN, curproxy, &defproxy, trash, sizeof(trash)); + if (rc < 0) { Alert("parsing [%s:%d] : %s\n", file, linenum, trash); return -1; } + else if (rc > 0) { + Warning("parsing [%s:%d] : %s\n", file, linenum, trash); + return 0; + } return 0; } }