@@ -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+
25802603static 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 ,
0 commit comments