Skip to content

Commit b7092b1

Browse files
committed
mod_proxy: add configure entry ProxyUnderscoredHeaders
Signed-off-by: Leo <[email protected]>
1 parent e2057d1 commit b7092b1

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

modules/proxy/mod_proxy.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,8 @@ static void * create_proxy_config(apr_pool_t *p, server_rec *s)
15911591
ps->id = apr_psprintf(p, "p%x", 1); /* simply for storage size */
15921592
ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
15931593
ps->viaopt_set = 0; /* 0 means default */
1594+
ps->underscored_headers = underscored_headers_allow; /* don't introduce breaking change */
1595+
ps->underscored_headers_set = 0;
15941596
ps->req = 0;
15951597
ps->max_balancers = 0;
15961598
ps->bal_persist = 0;
@@ -1752,6 +1754,8 @@ static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv)
17521754
ps->id = (overrides->id == NULL) ? base->id : overrides->id;
17531755
ps->viaopt = (overrides->viaopt_set == 0) ? base->viaopt : overrides->viaopt;
17541756
ps->viaopt_set = overrides->viaopt_set || base->viaopt_set;
1757+
ps->underscored_headers = (overrides->underscored_headers_set == 0) ? base->underscored_headers : overrides->underscored_headers;
1758+
ps->underscored_headers_set = overrides->underscored_headers_set || base->underscored_headers_set;
17551759
ps->req = (overrides->req_set == 0) ? base->req : overrides->req;
17561760
ps->req_set = overrides->req_set || base->req_set;
17571761
ps->bgrowth = (overrides->bgrowth_set == 0) ? base->bgrowth : overrides->bgrowth;
@@ -2577,6 +2581,25 @@ static const char*
25772581
return NULL;
25782582
}
25792583

2584+
static const char*
2585+
set_underscored_headers(cmd_parms *parms, void *dummy, const char *arg)
2586+
{
2587+
proxy_server_conf *psf =
2588+
ap_get_module_config(parms->server->module_config, &proxy_module);
2589+
2590+
if (strcasecmp(arg, "Allow") == 0)
2591+
psf->underscored_headers = underscored_headers_allow;
2592+
else if (strcasecmp(arg, "Drop") == 0)
2593+
psf->underscored_headers = underscored_headers_drop;
2594+
else if (strcasecmp(arg, "Reject") == 0)
2595+
psf->underscored_headers = underscored_headers_reject;
2596+
else
2597+
return "ProxyUnderscoredHeaders must be one of: Allow | Drop | Reject";
2598+
2599+
psf->underscored_headers_set = 1;
2600+
return NULL;
2601+
}
2602+
25802603
static const char*
25812604
set_bad_opt(cmd_parms *parms, void *dummy, const char *arg)
25822605
{
@@ -3066,6 +3089,8 @@ static const command_rec proxy_cmds[] =
30663089
"The default intranet domain name (in absence of a domain in the URL)"),
30673090
AP_INIT_TAKE1("ProxyVia", set_via_opt, NULL, RSRC_CONF,
30683091
"Configure Via: proxy header header to one of: on | off | block | full"),
3092+
AP_INIT_TAKE1("ProxyUnderscoredHeaders", set_underscored_headers, NULL, RSRC_CONF,
3093+
"Handling of headers with underscores to backend: allow | drop | reject"),
30693094
AP_INIT_ITERATE("ProxyErrorOverride", set_proxy_error_override, NULL, RSRC_CONF|ACCESS_CONF,
30703095
"use our error handling pages instead of the servers' we are proxying"),
30713096
AP_INIT_FLAG("ProxyPreserveHost", set_preserve_host, NULL, RSRC_CONF|ACCESS_CONF,

modules/proxy/mod_proxy.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,11 @@ typedef struct {
173173
via_block,
174174
via_full
175175
} viaopt; /* how to deal with proxy Via: headers */
176+
enum {
177+
underscored_headers_allow,
178+
underscored_headers_drop,
179+
underscored_headers_reject
180+
} underscored_headers;
176181
apr_size_t recv_buffer_size;
177182
apr_size_t io_buffer_size;
178183
long maxfwd;
@@ -194,6 +199,7 @@ typedef struct {
194199

195200
unsigned int req_set:1;
196201
unsigned int viaopt_set:1;
202+
unsigned int underscored_headers_set:1;
197203
unsigned int recv_buffer_size_set:1;
198204
unsigned int io_buffer_size_set:1;
199205
unsigned int maxfwd_set:1;

0 commit comments

Comments
 (0)