]> granicus.if.org Git - apache/commitdiff
And additional ServerTokens improvement...
authorJim Jagielski <jim@apache.org>
Fri, 28 Aug 2009 17:37:12 +0000 (17:37 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 28 Aug 2009 17:37:12 +0000 (17:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@808965 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/core.xml
server/core.c

diff --git a/CHANGES b/CHANGES
index d7248aff27c0e9e5b138b7230d4ea432a940e870..b80a023894b6dcefb36dc12288da97565609b84f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,8 +3,9 @@
 Changes with Apache 2.3.3
 
   *) ServerTokens now accepts 'Off' which disables sending of
-     Server: header and sets SERVER_SOFTWARE to empty.
-     [Jim Jagielski]
+     Server: header and sets SERVER_SOFTWARE to empty. It also accepts
+     'Set' which allows the user to specify any string as the Server:
+     name.  [Jim Jagielski]
 
   *) mod_headers: generalise the envclause to support expression
      evaluation with ap_expr parser [Nick Kew]
index 089a7b97f1330b04ea677a20ac049025f4045167..83a04aae1a33dffddc512d95d8875bd0971879fe 100644 (file)
@@ -2903,6 +2903,14 @@ header</description>
       <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
       (Unix)</code></dd>
 
+      <dt><code>ServerTokens Set <em>"String"</em></code></dt>
+
+      <dd>Server sends user specified string
+      (<em>e.g.</em>): <code>Server: MyWebServer/8.6</code><br/>
+      <strong>Note:</strong> The string must be in quotes if
+      there are any embedded spaces.
+      </dd>
+
       <dt><code>ServerTokens Full</code> (or not specified)</dt>
 
       <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
index 2656bd2cadcb0a9ea1fdf23084fbcab54cb5f680..a72c34e7de70b9089a830783f2e1e269c7b724e0 100644 (file)
@@ -2677,6 +2677,7 @@ AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r)
 static char *server_banner = NULL;
 static int banner_locked = 0;
 static char *server_description = NULL;
+static char *user_server_banner = NULL;
 
 enum server_token_type {
     SrvTk_MAJOR,         /* eg: Apache/2 */
@@ -2685,7 +2686,8 @@ enum server_token_type {
     SrvTk_OS,            /* eg: Apache/2.0.41 (UNIX) */
     SrvTk_FULL,          /* eg: Apache/2.0.41 (UNIX) PHP/4.2.2 FooBar/1.2b */
     SrvTk_PRODUCT_ONLY,  /* eg: Apache */
-    SrvTk_OFF            /* eg: <blank> */
+    SrvTk_OFF,           /* eg: <blank> */
+    SrvTk_SET
 };
 static enum server_token_type ap_server_tokens = SrvTk_FULL;
 
@@ -2749,7 +2751,10 @@ AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *compone
  */
 static void set_banner(apr_pool_t *pconf)
 {
-    if (ap_server_tokens == SrvTk_OFF) {
+    if (ap_server_tokens == SrvTk_SET) {
+        ap_add_version_component(pconf, user_server_banner);
+    }
+    else if (ap_server_tokens == SrvTk_OFF) {
         ap_add_version_component(pconf, "");
     }
     else if (ap_server_tokens == SrvTk_PRODUCT_ONLY) {
@@ -2779,7 +2784,7 @@ static void set_banner(apr_pool_t *pconf)
 }
 
 static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
+                                   const char *arg1, const char *arg2)
 {
     const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
 
@@ -2787,22 +2792,26 @@ static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
         return err;
     }
 
-    if (!strcasecmp(arg, "Off")) {
+    if (!strcasecmp(arg1, "Set")) {
+        ap_server_tokens = SrvTk_SET;
+        user_server_banner = (arg2 ? apr_pstrdup(cmd->pool, arg2) : "");
+    }
+    else if (!strcasecmp(arg1, "Off")) {
         ap_server_tokens = SrvTk_OFF;
     }
-    else if (!strcasecmp(arg, "OS")) {
+    else if (!strcasecmp(arg1, "OS")) {
         ap_server_tokens = SrvTk_OS;
     }
-    else if (!strcasecmp(arg, "Min") || !strcasecmp(arg, "Minimal")) {
+    else if (!strcasecmp(arg1, "Min") || !strcasecmp(arg1, "Minimal")) {
         ap_server_tokens = SrvTk_MINIMAL;
     }
-    else if (!strcasecmp(arg, "Major")) {
+    else if (!strcasecmp(arg1, "Major")) {
         ap_server_tokens = SrvTk_MAJOR;
     }
-    else if (!strcasecmp(arg, "Minor") ) {
+    else if (!strcasecmp(arg1, "Minor") ) {
         ap_server_tokens = SrvTk_MINOR;
     }
-    else if (!strcasecmp(arg, "Prod") || !strcasecmp(arg, "ProductOnly")) {
+    else if (!strcasecmp(arg1, "Prod") || !strcasecmp(arg1, "ProductOnly")) {
         ap_server_tokens = SrvTk_PRODUCT_ONLY;
     }
     else {
@@ -3310,8 +3319,9 @@ AP_INIT_TAKE1("LogLevel", set_loglevel, NULL, RSRC_CONF,
   "Level of verbosity in error logging"),
 AP_INIT_TAKE1("NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF,
   "A numeric IP address:port, or the name of a host"),
-AP_INIT_TAKE1("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
-  "Determine tokens displayed in the Server: header - Min(imal), Major, Minor, Prod, OS, Off or Full"),
+AP_INIT_TAKE12("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
+  "Determine tokens displayed in the Server: header - Min(imal), "
+  "Major, Minor, Prod, OS, Off, Set or Full"),
 AP_INIT_TAKE1("LimitRequestLine", set_limit_req_line, NULL, RSRC_CONF,
   "Limit on maximum size of an HTTP request line"),
 AP_INIT_TAKE1("LimitRequestFieldsize", set_limit_req_fieldsize, NULL,