From 46b25893563c667aaa04f20f7ac0b191fd281fe0 Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Fri, 18 Aug 2017 08:49:42 +0000 Subject: [PATCH] Merge 1805099 from trunk: Fix ProxyAddHeaders merging. * modules/proxy/mod_proxy.h: Add add_forwarded_headers_set field to proxy_dir_conf. * modules/proxy/mod_proxy.c (create_proxy_dir_config): Initialize add_forwarded_headers_set. (add_proxy_http_headers): Set it. (merge_proxy_dir_config): Merge add_forwarded_headers correctly. Reviewed by: jorton, rpluem, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1805390 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 2 ++ modules/proxy/mod_proxy.c | 9 ++++++++- modules/proxy/mod_proxy.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index e0d55ce253..d025033ea6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.28 + *) mod_proxy: Fix ProxyAddHeaders merging. [Joe Orton] + *) core: Disallow multiple Listen on the same IP:port when listener buckets are configured (ListenCoresBucketsRatio > 0), consistently with the single bucket case (default), thus avoiding the leak of the corresponding socket diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index f6fb473ed1..9f5a3ae279 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1451,6 +1451,7 @@ static void *create_proxy_dir_config(apr_pool_t *p, char *dummy) new->error_override = 0; new->error_override_set = 0; new->add_forwarded_headers = 1; + new->add_forwarded_headers_set = 0; return (void *) new; } @@ -1482,7 +1483,12 @@ static void *merge_proxy_dir_config(apr_pool_t *p, void *basev, void *addv) new->error_override_set = add->error_override_set || base->error_override_set; new->alias = (add->alias_set == 0) ? base->alias : add->alias; new->alias_set = add->alias_set || base->alias_set; - new->add_forwarded_headers = add->add_forwarded_headers; + new->add_forwarded_headers = + (add->add_forwarded_headers_set == 0) ? base->add_forwarded_headers + : add->add_forwarded_headers; + new->add_forwarded_headers_set = add->add_forwarded_headers_set + || base->add_forwarded_headers_set; + return new; } @@ -1970,6 +1976,7 @@ static const char * { proxy_dir_conf *conf = dconf; conf->add_forwarded_headers = flag; + conf->add_forwarded_headers_set = 1; return NULL; } static const char * diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 8a0ad10259..4f31bed389 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -235,6 +235,7 @@ typedef struct { unsigned int error_override_set:1; unsigned int alias_set:1; unsigned int add_forwarded_headers:1; + unsigned int add_forwarded_headers_set:1; /** Named back references */ apr_array_header_t *refs; -- 2.40.0