From: Ruediger Pluem Date: Mon, 3 Sep 2007 10:05:16 +0000 (+0000) Subject: Merge r483633 from trunk: X-Git-Tag: 2.2.6~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8f3efee97d10c0453b00e91c239af6d4c1de81a;p=thirdparty%2Fapache%2Fhttpd.git Merge r483633 from trunk: * Do not replace a Date header set by a proxied backend server. PR: 40232 Submitted by: rpluem Reviewed by: rpluem, jim, niq git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@572272 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index bb3ce4bf132..fa875848cb1 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.6 + *) core: Do not replace a Date header set by a proxied backend server. + PR 40232. [Ruediger Pluem] + *) mod_proxy: Add a missing assignment in an error checking code path. PR 40865. [Andrew Rucker Jones ] diff --git a/STATUS b/STATUS index 43e004b467e..1eb9a4fb935 100644 --- a/STATUS +++ b/STATUS @@ -79,13 +79,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * core: Do not replace a Date header set by a proxied backend server. - PR 40232. - Trunk version of patch: - http://svn.apache.org/viewcvs.cgi?rev=483633&view=rev - Backport version for 2.2.x of patch: - Trunk version of patch works - +1: rpluem, jim, niq PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index 6df4edf627b..185f50f83d0 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -721,22 +721,37 @@ 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); } } 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()); }