From 3b20b2b9d1ff7f920ddb8ca65c83c9e41e90d245 Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Tue, 30 Jun 2020 12:15:41 +0000 Subject: [PATCH] mod_proxy: unfail mixed ProxyPass/ and ProxyPassMatch/. It is not a failure in current 2.4.x, so to ease backport and to avoid compat breakage simply warn about the second directive being ignored. This commit can be reverted in trunk if we want next versions to fail in this case. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1879361 13f79535-47bb-0310-9956-ffa450edef68 --- docs/log-message-tags/next-number | 2 +- modules/proxy/mod_proxy.c | 33 +++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/docs/log-message-tags/next-number b/docs/log-message-tags/next-number index 5dae555dfb..fde32dc6d6 100644 --- a/docs/log-message-tags/next-number +++ b/docs/log-message-tags/next-number @@ -1 +1 @@ -10249 +10251 diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index d730a6d047..e40d8f8c87 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -2185,10 +2185,21 @@ static const char * PROXY_COPY_CONF_PARAMS(worker, conf); } else if ((use_regex != 0) ^ (worker->s->is_name_matchable != 0)) { - return apr_pstrcat(cmd->temp_pool, "ProxyPass/ and " - "ProxyPassMatch/ can't be used " - "together with the same worker name ", - "(", worker->s->name, ")", NULL); + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, APLOGNO(10249) + "ProxyPass/ and ProxyPassMatch/ " + "can't be used altogether with the same worker " + "name (%s); ignoring ProxyPass%s", + worker->s->name, use_regex ? "Match" : ""); + /* Rollback new alias */ + if (cmd->path) { + dconf->alias = NULL; + dconf->alias_set = 0; + } + else { + memset(new, 0, sizeof(*new)); + apr_array_pop(conf->aliases); + } + return NULL; } else { reuse = 1; @@ -2955,10 +2966,15 @@ static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg) " ", err, NULL); } else if ((use_regex != 0) ^ (worker->s->is_name_matchable != 0)) { - return apr_pstrcat(cmd->temp_pool, "ProxyPass/ and " - "ProxyPassMatch/ can't be used " - "altogether with the same worker name ", - "(", worker->s->name, ")", NULL); + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, APLOGNO(10250) + "ProxyPass/ and ProxyPassMatch/ " + "can't be used altogether with the same worker " + "name (%s); ignoring ", + worker->s->name, use_regex ? "Match" : ""); + /* Rollback new section */ + ((void **)sconf->sec_proxy->elts)[sconf->sec_proxy->nelts - 1] = NULL; + apr_array_pop(sconf->sec_proxy); + goto cleanup; } if (!worker->section_config) { worker->section_config = new_dir_conf; @@ -2989,6 +3005,7 @@ static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg) } } +cleanup: cmd->path = old_path; cmd->override = old_overrides;