]> granicus.if.org Git - apache/commitdiff
Virtual host config file fix backported from v1.3
authorGraham Leggett <minfrin@apache.org>
Sat, 10 Mar 2001 21:19:21 +0000 (21:19 +0000)
committerGraham Leggett <minfrin@apache.org>
Sat, 10 Mar 2001 21:19:21 +0000 (21:19 +0000)
PR:
Obtained from:
Reviewed by:

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

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

index dbb47b9a29fe38862f0f2fefc01916b1c3469292..4c651206bc92973a719369a31edd6ed25df40059 100644 (file)
@@ -421,12 +421,38 @@ static void * create_proxy_config(apr_pool_t *p, server_rec *s)
     ps->cache_completion = DEFAULT_CACHE_COMPLETION;
     ps->domain = NULL;
     ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
+    ps->viaopt_set = 0; /* 0 means default */
     ps->req = 0;
+    ps->req_set = 0;
+    ps->recv_buffer_size = 0; /* this default was left unset for some reason */
+    ps->recv_buffer_size_set = 0;
 
     ap_cache_init(&ps->cache, "mod_proxy cache", s);
     return ps;
 }
 
+static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv)
+{
+    proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
+    proxy_server_conf *base = (proxy_server_conf *) basev;
+    proxy_server_conf *overrides = (proxy_server_conf *) overridesv;
+
+    ps->proxies = ap_append_arrays(p, base->proxies, overrides->proxies);
+    ps->aliases = ap_append_arrays(p, base->aliases, overrides->aliases);
+    ps->raliases = ap_append_arrays(p, base->raliases, overrides->raliases);
+    ps->noproxies = ap_append_arrays(p, base->noproxies, overrides->noproxies);
+    ps->dirconn = ap_append_arrays(p, base->dirconn, overrides->dirconn);
+    ps->nocaches = ap_append_arrays(p, base->nocaches, overrides->nocaches);
+    ps->allowed_connect_ports = ap_append_arrays(p, base->allowed_connect_ports, overrides->allowed_connect_ports);
+
+    ps->domain = (overrides->domain == NULL) ? base->domain : overrides->domain;
+    ps->viaopt = (overrides->viaopt_set == 0) ? base->viaopt : overrides->viaopt;
+    ps->req = (overrides->req_set == 0) ? base->req : overrides->req;
+    ps->recv_buffer_size = (overrides->recv_buffer_size_set == 0) ? base->recv_buffer_size : overrides->recv_buffer_size;
+
+    return ps;
+}
+
 static const char *
     add_proxy(cmd_parms *cmd, void *dummy, const char *f1, const char *r1)
 {
@@ -659,6 +685,7 @@ static const char *
     ap_get_module_config(parms->server->module_config, &proxy_module);
 
     psf->req = flag;
+    psf->req_set = 1;
     return NULL;
 }
 
@@ -673,6 +700,7 @@ static const char *
     }
 
     psf->recv_buffer_size = s;
+    psf->recv_buffer_size_set = 1;
     return NULL;
 }
 
@@ -695,6 +723,7 @@ static const char*
                "off | on | full | block";
     }
 
+    psf->viaopt_set = 1;
     return NULL;    
 }
 
@@ -760,7 +789,7 @@ module AP_MODULE_DECLARE_DATA proxy_module =
     NULL,                      /* create per-directory config structure */
     NULL,                      /* merge per-directory config structures */
     create_proxy_config,       /* create per-server config structure */
-    NULL,                      /* merge per-server config structures */
+    merge_proxy_config,                /* merge per-server config structures */
     proxy_cmds,                        /* command table */
     register_hooks
 };
index 1991c457ed4547964ff0447094bb4779a7fdb7d0..2d7c7f04cb85cf5f07d22b8bf5fd277208d1c8f2 100644 (file)
@@ -184,6 +184,7 @@ typedef struct {
     apr_array_header_t *allowed_connect_ports;
     const char *domain;                /* domain name to use in absence of a domain name in the request */
     int req;                   /* true if proxy requests are enabled */
+    char req_set;
     float cache_completion;     /* Force cache completion after this point */
     enum {
       via_off,
@@ -191,7 +192,9 @@ typedef struct {
       via_block,
       via_full
     } viaopt;                   /* how to deal with proxy Via: headers */
+    char viaopt_set;
     size_t recv_buffer_size;
+    char recv_buffer_size_set;
     ap_cache_handle_t *cache;
 } proxy_server_conf;