]> granicus.if.org Git - apache/commitdiff
Fix ProxyAddHeaders merging.
authorJoe Orton <jorton@apache.org>
Tue, 15 Aug 2017 16:54:22 +0000 (16:54 +0000)
committerJoe Orton <jorton@apache.org>
Tue, 15 Aug 2017 16:54:22 +0000 (16:54 +0000)
* 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.

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

CHANGES
modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h

diff --git a/CHANGES b/CHANGES
index dd224352ff23ce4a67ed2595c49970a3c52da345..826575b7f0d29c8fe6b9e8ffea83e0b59dde4a6b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_proxy: Fix ProxyAddHeaders merging.  [Joe Orton]
+
   *) mod_md: new module for managing domains across VirtualHosts with ACME protocol 
      implementation for automated certificate signup and renewal. Default CA is
      the test area of Let's Encrypt right now, so certificates root will not be valid.
index b9cf3475281ee7a2f264dbb43e1eca9a28976dcb..7ba7f91a47eac3c0ec57c4f79cb0104a50a8d8fc 100644 (file)
@@ -1568,6 +1568,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;
 }
@@ -1599,7 +1600,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;
 }
 
@@ -2102,6 +2108,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 *
index 4edda9fe1f4ca1fa678874dfe2ec7d23a31361eb..d14799eeca47bcaf2828ed3168c9e5ae4163e4a3 100644 (file)
@@ -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;