]> granicus.if.org Git - apache/commitdiff
* Do not replace a Date header set by a proxied backend server.
authorRuediger Pluem <rpluem@apache.org>
Thu, 7 Dec 2006 20:01:07 +0000 (20:01 +0000)
committerRuediger Pluem <rpluem@apache.org>
Thu, 7 Dec 2006 20:01:07 +0000 (20:01 +0000)
PR: 40232

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@483633 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/http/http_filters.c

diff --git a/CHANGES b/CHANGES
index c8c87acd3fe6bbfaecc59bc6d320cfe91726f242..4b6b6e4171016f131b5c2db322686a9ae205f127 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 Changes with Apache 2.3.0
   [Remove entries to the current 2.0 and 2.2 section below, when backported]
 
+  *) core: Do not replace a Date header set by a proxied backend server.
+     PR 40232. [Ruediger Pluem]
+
   *) mod_proxy: Ensure that at least scheme://hostname[:port] matches between
      worker and URL when searching for the best fitting worker for a given URL.
      PR 40910. [Ruediger Pluem]
index 57b780de743b28daa203351803c9799b7dae4e1f..75d84cc89a7b3319f80386adeda80e7a478d81bb 100644 (file)
@@ -741,16 +741,28 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
     apr_brigade_writev(bb, NULL, NULL, vec, 4);
 #endif
 
-    date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-    ap_recent_rfc822_date(date, r->request_time);
-
     h.pool = r->pool;
     h.bb = bb;
-    form_header_field(&h, "Date", date);
 
-    /* keep the set-by-proxy server header, otherwise
-     * generate a new server header */
+    /*
+     * keep the set-by-proxy server and date headers, otherwise
+     * generate a new server header / date header
+     */
     if (r->proxyreq != PROXYREQ_NONE) {
+        const char *proxy_date;
+
+        proxy_date = apr_table_get(r->headers_out, "Date");
+        if (!proxy_date) {
+            /*
+             * proxy_date needs to be const. So use date for the creation of
+             * our own Date header and pass it over to proxy_date later to
+             * avoid a compiler warning.
+             */
+            date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
+            ap_recent_rfc822_date(date, r->request_time);
+            proxy_date = date;
+        }
+        form_header_field(&h, "Date", proxy_date);
         server = apr_table_get(r->headers_out, "Server");
         if (server) {
             form_header_field(&h, "Server", server);
@@ -759,6 +771,9 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
         }
     }
     else {
+        date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
+        ap_recent_rfc822_date(date, r->request_time);
+        form_header_field(&h, "Date", date);
         form_header_field(&h, "Server", ap_get_server_banner());
     }