[MINOR] report haproxy's version by default on the stats page

For people who manage many haproxies, it is sometimes convenient
to be informed of their version. This patch adds this, with the
option to disable this report by specifying "stats hide-version".

Also, the feature may be permanently disabled by setting the
STATS_VERSION_STRING to "" (empty string), or the format can
simply be adjusted.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 994df07..97c427c 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -2,9 +2,9 @@
                                  HAProxy
                           Configuration Manual
                          ----------------------
-                             version 1.3.12.3
+                             version 1.3.13
                              willy tarreau
-                               2007/09/11
+                               2007/10/15
 
 
 This document covers the configuration language as implemented in the version
@@ -299,6 +299,7 @@
 stats refresh               X          -         X         X
 stats scope                 X          -         X         X
 stats uri                   X          -         X         X
+stats hide-version          X          -         X         X
 transparent                 X          X         X         -
 use_backend                 -          X         X         -
 usesrc                      X          -         X         X
diff --git a/include/common/defaults.h b/include/common/defaults.h
index 2c757d2..5b18767 100644
--- a/include/common/defaults.h
+++ b/include/common/defaults.h
@@ -125,4 +125,12 @@
 #define SRV_CHK_INTER_THRES 1000
 #endif
 
+/* Specifies the string used to report the version and release date on the
+ * statistics page. May be defined to the empty string ("") to permanently
+ * disable the feature.
+ */
+#ifndef STATS_VERSION_STRING
+#define STATS_VERSION_STRING " version " HAPROXY_VERSION ", released " HAPROXY_DATE
+#endif
+
 #endif /* _COMMON_DEFAULTS_H */
diff --git a/include/common/uri_auth.h b/include/common/uri_auth.h
index 9f675db..fbbe7df 100644
--- a/include/common/uri_auth.h
+++ b/include/common/uri_auth.h
@@ -31,12 +31,15 @@
 	char *px_id;			/* proxy id */
 };
 
+#define	ST_HIDEVER	0x00000001	/* do not report the version and reldate */
+
 /* later we may link them to support multiple URI matching */
 struct uri_auth {
 	int uri_len;			/* the prefix length */
 	char *uri_prefix;		/* the prefix we want to match */
 	char *auth_realm;		/* the realm reported to the client */
 	int refresh;			/* refresh interval for the browser (in seconds) */
+	int flags;			/* some flags describing the statistics page */
 	struct user_auth *users;	/* linked list of valid user:passwd couples */
 	struct stat_scope *scope;	/* linked list of authorized proxies */
 };
@@ -67,6 +70,7 @@
 struct uri_auth *stats_set_uri(struct uri_auth **root, char *uri);
 struct uri_auth *stats_set_realm(struct uri_auth **root, char *realm);
 struct uri_auth *stats_set_refresh(struct uri_auth **root, int interval);
+struct uri_auth *stats_set_flag(struct uri_auth **root, int flag);
 struct uri_auth *stats_add_auth(struct uri_auth **root, char *user);
 struct uri_auth *stats_add_scope(struct uri_auth **root, char *scope);
 
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 43ed8aa..53c900a 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1089,8 +1089,13 @@
 				Alert("parsing [%s:%d] : out of memory.\n", file, linenum);
 				return -1;
 			}
+		} else if (!strcmp(args[1], "hide-version")) {
+			if (!stats_set_flag(&curproxy->uri_auth, ST_HIDEVER)) {
+				Alert("parsing [%s:%d] : out of memory.\n", file, linenum);
+				return -1;
+			}
 		} else {
-			Alert("parsing [%s:%d] : unknown stats parameter '%s' (expects 'uri', 'realm', 'auth' or 'enable').\n",
+			Alert("parsing [%s:%d] : unknown stats parameter '%s' (expects 'hide-version', 'uri', 'realm', 'auth' or 'enable').\n",
 			      file, linenum, args[0]);
 			return -1;
 		}
diff --git a/src/proto_http.c b/src/proto_http.c
index 3cd97fe..c218e6b 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -3579,7 +3579,7 @@
 			 */
 		chunk_printf(&msg, sizeof(trash),
 			     "<body><h1><a href=\"" PRODUCT_URL "\" style=\"text-decoration: none;\">"
-			     PRODUCT_NAME "</a></h1>\n"
+			     PRODUCT_NAME "%s</a></h1>\n"
 			     "<h2>Statistics Report for pid %d</h2>\n"
 			     "<hr width=\"100%%\" class=\"hr\">\n"
 			     "<h3>&gt; General process information</h3>\n"
@@ -3607,6 +3607,7 @@
 			     "<td align=\"left\" valign=\"top\" nowrap width=\"1%%\">"
 			     "<b>Display option:</b><ul style=\"margin-top: 0.25em;\">"
 			     "",
+			     (s->be->uri_auth->flags&ST_HIDEVER)?"":(STATS_VERSION_STRING),
 			     pid, pid, global.nbproc,
 			     up / 86400, (up % 86400) / 3600,
 			     (up % 3600) / 60, (up % 60),
diff --git a/src/uri_auth.c b/src/uri_auth.c
index f5f90af..8ac618c 100644
--- a/src/uri_auth.c
+++ b/src/uri_auth.c
@@ -127,6 +127,19 @@
 }
 
 /*
+ * Returns a default uri_auth with the <flag> set.
+ * Uses the pointer provided if not NULL and not initialized.
+ */
+struct uri_auth *stats_set_flag(struct uri_auth **root, int flag)
+{
+	struct uri_auth *u;
+	
+	if ((u = stats_check_init_uri_auth(root)) != NULL)
+		u->flags |= flag;
+	return u;
+}
+
+/*
  * Returns a default uri_auth with a <user:passwd> entry added to the list of
  * authorized users. If a matching entry is found, no update will be performed.
  * Uses the pointer provided if not NULL and not initialized.