[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;