From: Jim Jagielski Date: Fri, 10 Jul 2009 12:30:17 +0000 (+0000) Subject: Merge r778942, r780648, r780655, r780692, r780697, r780699 from trunk: X-Git-Tag: 2.2.12~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c27d9388456505085ecab382d785b79c31c0294;p=thirdparty%2Fapache%2Fhttpd.git Merge r778942, r780648, r780655, r780692, r780697, r780699 from trunk: mod_alias: Enforce sanity in args to Redirect PR 44729 Fix error with arg counting * Some custom defined response codes also do not require 3 arguments (all that are not redirects). More adjustment for Redirect argument checking... typo Simplify... handle this below, even though it's after some possible expensive regex Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@792917 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index f96dcfc1223..e6731ccfa72 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,9 @@ Changes with Apache 2.2.12 different security issues which may affect particular configurations and third-party modules. + *) mod_alias: check sanity in Redirect arguments. + PR 44729 [Sönke Tesch , Jim Jagielski] + *) mod_proxy_http: fix Host: header for literal IPv6 addresses. PR 47177 [Carlos Garcia Braschi ] diff --git a/STATUS b/STATUS index ff09d4098ff..d045cb4bdff 100644 --- a/STATUS +++ b/STATUS @@ -85,16 +85,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_alias: Enforce sanity in args to Redirect - PR 44729 - patch: http://svn.apache.org/viewvc?view=rev&revision=778942 - http://svn.apache.org/viewvc?view=rev&revision=780648 - http://svn.apache.org/viewvc?view=rev&revision=780655 - http://svn.apache.org/viewvc?view=rev&revision=780692 - http://svn.apache.org/viewvc?view=rev&revision=780697 - http://svn.apache.org/viewvc?view=rev&revision=780699 - +1: niq, rpluem, takashi - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/mappers/mod_alias.c b/modules/mappers/mod_alias.c index 65a720a4fa4..6a6856c5ca5 100644 --- a/modules/mappers/mod_alias.c +++ b/modules/mappers/mod_alias.c @@ -176,21 +176,41 @@ static const char *add_redirect_internal(cmd_parms *cmd, alias_server_conf *serverconf = ap_get_module_config(s->module_config, &alias_module); int status = (int) (long) cmd->info; + int grokarg1 = 1; ap_regex_t *r = NULL; const char *f = arg2; const char *url = arg3; - if (!strcasecmp(arg1, "gone")) - status = HTTP_GONE; - else if (!strcasecmp(arg1, "permanent")) + /* + * Logic flow: + * Go ahead and try to grok the 1st arg, in case it is a + * Redirect status. Now if we have 3 args, we expect that + * we were able to understand that 1st argument (it's something + * we expected, so if not, then we bail + */ + if (!strcasecmp(arg1, "permanent")) status = HTTP_MOVED_PERMANENTLY; else if (!strcasecmp(arg1, "temp")) status = HTTP_MOVED_TEMPORARILY; else if (!strcasecmp(arg1, "seeother")) status = HTTP_SEE_OTHER; + else if (!strcasecmp(arg1, "gone")) + status = HTTP_GONE; else if (apr_isdigit(*arg1)) status = atoi(arg1); - else { + else + grokarg1 = 0; + + if (arg3 && !grokarg1) + return "Redirect: invalid first argument (of three)"; + + /* + * if we don't have the 3rd arg and we didn't understand the 1st + * one, then assume URL-path URL. This also handles case, eg, GONE + * we even though we don't have a 3rd arg, we did understand the 1st + * one, so we don't want to re-arrange + */ + if (!arg3 && !grokarg1) { f = arg1; url = arg2; }