From 365d1cd84c5e44129a706629815f2721277c125f Mon Sep 17 00:00:00 2001 From: Krzysztof Oledzki Date: Sun, 21 Oct 2007 02:55:17 +0200 Subject: [PATCH] [PATCH]: Check for duplicated conflicting proxies Currently haproxy accepts a config with duplicated proxies (listen/fronted/backed/ruleset). This patch fix this, so the application will complain when there is an error. With this modification it is still possible to use the same name for two proxies (for example frontend&backend) as long there is no conflict: listen backend frontend ruleset listen - - - - backend - - OK - frontend - OK - - ruleset - - - - Best regards, Krzysztof Oledzki --- src/cfgparse.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index d9e01a7a4e..7483a9c6cb 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -523,7 +523,28 @@ int cfg_parse_listen(const char *file, int linenum, char **args) file, linenum, args[0]); return -1; } - + + for (curproxy = proxy; curproxy != NULL; curproxy = curproxy->next) { + /* + * If there are two proxies with the same name only following + * combinations are allowed: + * + * listen backend frontend ruleset + * listen - - - - + * backend - - OK - + * frontend - OK - - + * ruleset - - - - + */ + + if (!strcmp(curproxy->id, args[1]) && + (rc!=(PR_CAP_FE|PR_CAP_RS) || curproxy->cap!=(PR_CAP_BE|PR_CAP_RS)) && + (rc!=(PR_CAP_BE|PR_CAP_RS) || curproxy->cap!=(PR_CAP_FE|PR_CAP_RS))) { + Alert("parsing %s: duplicated proxy %s with conflicting capabilities: %X/%X!\n", + file, args[1], curproxy->cap, rc); + return -1; + } + } + if ((curproxy = (struct proxy *)calloc(1, sizeof(struct proxy))) == NULL) { Alert("parsing [%s:%d] : out of memory.\n", file, linenum); return -1; -- 2.47.3