From: Willy Tarreau Date: Sun, 4 Oct 2009 18:54:54 +0000 (+0200) Subject: [MINOR] config: reference file and line with any listener/proxy/server declaration X-Git-Tag: v1.4-dev4~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=90a570f0251ba2b5444aeb391b1f649f2b8f09e6;p=thirdparty%2Fhaproxy.git [MINOR] config: reference file and line with any listener/proxy/server declaration Those will be used later for cross-references of conflicts or errors. --- diff --git a/include/types/protocols.h b/include/types/protocols.h index c89deb3d31..62d9f60e86 100644 --- a/include/types/protocols.h +++ b/include/types/protocols.h @@ -104,6 +104,11 @@ struct listener { } perm; char *interface; /* interface name or NULL */ int maxseg; /* for TCP, advertised MSS */ + + struct { + const char *file; /* file where the section appears */ + int line; /* line where the section appears */ + } conf; /* config information */ }; /* This structure contains all information needed to easily handle a protocol. diff --git a/include/types/proxy.h b/include/types/proxy.h index 1c73d24e2b..88a01cc34c 100644 --- a/include/types/proxy.h +++ b/include/types/proxy.h @@ -258,6 +258,11 @@ struct proxy { int no_options2; /* PR_O2_* */ struct pxcounters counters; /* statistics counters */ + + struct { + const char *file; /* file where the section appears */ + int line; /* line where the section appears */ + } conf; /* config information */ }; struct switching_rule { diff --git a/include/types/server.h b/include/types/server.h index ddf5a46822..45528fa99b 100644 --- a/include/types/server.h +++ b/include/types/server.h @@ -131,6 +131,11 @@ struct server { int puid; /* proxy-unique server ID, used for SNMP */ struct srvcounters counters; /* statistics counters */ + + struct { + const char *file; /* file where the section appears */ + int line; /* line where the section appears */ + } conf; /* config information */ }; diff --git a/src/cfgparse.c b/src/cfgparse.c index b35a15ea6c..38dd8eb1ca 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -876,6 +876,8 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) curproxy->next = proxy; proxy = curproxy; + curproxy->conf.file = file; + curproxy->conf.line = linenum; LIST_INIT(&curproxy->pendconns); LIST_INIT(&curproxy->acl); LIST_INIT(&curproxy->block_cond); @@ -895,10 +897,17 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) /* parse the listener address if any */ if ((curproxy->cap & PR_CAP_FE) && *args[2]) { + struct listener *new, *last = curproxy->listen; if (!str2listener(args[2], curproxy)) { err_code |= ERR_FATAL; goto out; } + new = curproxy->listen; + while (new != last) { + new->conf.file = file; + new->conf.line = linenum; + new = new->next; + } global.maxsock++; } @@ -1044,7 +1053,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) /* Now let's parse the proxy-specific keywords */ if (!strcmp(args[0], "bind")) { /* new listen addresses */ - struct listener *last_listen; + struct listener *new_listen, *last_listen; int cur_arg; if (curproxy == &defproxy) { @@ -1068,6 +1077,13 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) goto out; } + new_listen = curproxy->listen; + while (new_listen != last_listen) { + new_listen->conf.file = file; + new_listen->conf.line = linenum; + new_listen = new_listen->next; + } + cur_arg = 2; while (*(args[cur_arg])) { if (!strcmp(args[cur_arg], "interface")) { /* specifically bind to this interface */ @@ -2453,6 +2469,8 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) curproxy->srv = newsrv; newsrv->proxy = curproxy; newsrv->puid = curproxy->next_svid++; + newsrv->conf.file = file; + newsrv->conf.line = linenum; LIST_INIT(&newsrv->pendconns); do_check = 0;