[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 c89deb3..62d9f60 100644
--- a/include/types/protocols.h
+++ b/include/types/protocols.h
@@ -104,6 +104,11 @@
} 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 1c73d24..88a01cc 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -258,6 +258,11 @@
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 ddf5a46..45528fa 100644
--- a/include/types/server.h
+++ b/include/types/server.h
@@ -131,6 +131,11 @@
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 b35a15e..38dd8eb 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -876,6 +876,8 @@
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 @@
/* 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 @@
/* 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 @@
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 @@
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;