You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2005/02/03 14:38:26 UTC
svn commit: r151153 - in httpd/httpd/trunk: CHANGES
modules/proxy/mod_proxy.c modules/proxy/mod_proxy.h
modules/proxy/proxy_ajp.c modules/proxy/proxy_ftp.c
modules/proxy/proxy_http.c modules/proxy/proxy_util.c
Author: jim
Date: Thu Feb 3 05:38:24 2005
New Revision: 151153
URL: http://svn.apache.org/viewcvs?view=rev&rev=151153
Log:
Close PR 32459, 15207. API change for PROXY_DECLARE ap_proxy_canonenc()
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/proxy/mod_proxy.c
httpd/httpd/trunk/modules/proxy/mod_proxy.h
httpd/httpd/trunk/modules/proxy/proxy_ajp.c
httpd/httpd/trunk/modules/proxy/proxy_ftp.c
httpd/httpd/trunk/modules/proxy/proxy_http.c
httpd/httpd/trunk/modules/proxy/proxy_util.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/CHANGES?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/CHANGES (original)
+++ httpd/httpd/trunk/CHANGES Thu Feb 3 05:38:24 2005
@@ -2,6 +2,9 @@
[Remove entries to the current 2.0 section below, when backported]
+ *) mod_proxy: Fix incorrect decoding/unescaping for reverse proxies.
+ PR 32459, 15207. [Jim Jagielski]
+
*) Start keeping track of time-taken-to-process-request again for
mod_status if ExtendedStatus is enabled. [Jim Jagielski]
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/mod_proxy.c?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Thu Feb 3 05:38:24 2005
@@ -1,4 +1,3 @@
-#define FIX_15207
/* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/mod_proxy.h?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Thu Feb 3 05:38:24 2005
@@ -381,7 +381,7 @@
PROXY_DECLARE(int) ap_proxy_hex2c(const char *x);
PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x);
PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
- int isenc);
+ int forcedec, int proxyreq);
PROXY_DECLARE(char *)ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
char **passwordp, char **hostp, apr_port_t *port);
PROXY_DECLARE(const char *)ap_proxy_date_canon(apr_pool_t *p, const char *x);
Modified: httpd/httpd/trunk/modules/proxy/proxy_ajp.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/proxy_ajp.c?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_ajp.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_ajp.c Thu Feb 3 05:38:24 2005
@@ -79,7 +79,7 @@
search = r->args;
/* process path */
- path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, r->proxyreq);
+ path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, 0, r->proxyreq);
if (path == NULL)
return HTTP_BAD_REQUEST;
Modified: httpd/httpd/trunk/modules/proxy/proxy_ftp.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/proxy_ftp.c?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_ftp.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_ftp.c Thu Feb 3 05:38:24 2005
@@ -166,7 +166,7 @@
strp = strchr(url, ';');
if (strp != NULL) {
*(strp++) = '\0';
- parms = ap_proxy_canonenc(p, strp, strlen(strp), enc_parm,
+ parms = ap_proxy_canonenc(p, strp, strlen(strp), enc_parm, 0,
r->proxyreq);
if (parms == NULL)
return HTTP_BAD_REQUEST;
@@ -174,7 +174,7 @@
else
parms = "";
- path = ap_proxy_canonenc(p, url, strlen(url), enc_path, r->proxyreq);
+ path = ap_proxy_canonenc(p, url, strlen(url), enc_path, 0, r->proxyreq);
if (path == NULL)
return HTTP_BAD_REQUEST;
if (!ftp_check_string(path))
@@ -182,13 +182,13 @@
if (r->proxyreq && r->args != NULL) {
if (strp != NULL) {
- strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_parm, 1);
+ strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_parm, 1, r->proxyreq);
if (strp == NULL)
return HTTP_BAD_REQUEST;
parms = apr_pstrcat(p, parms, "?", strp, NULL);
}
else {
- strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_fpath, 1);
+ strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_fpath, 1, r->proxyreq);
if (strp == NULL)
return HTTP_BAD_REQUEST;
path = apr_pstrcat(p, path, "?", strp, NULL);
Modified: httpd/httpd/trunk/modules/proxy/proxy_http.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/proxy_http.c?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_http.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_http.c Thu Feb 3 05:38:24 2005
@@ -79,7 +79,7 @@
search = r->args;
/* process path */
- path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, r->proxyreq);
+ path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, 0, r->proxyreq);
if (path == NULL)
return HTTP_BAD_REQUEST;
Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/proxy_util.c?view=diff&r1=151152&r2=151153
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Thu Feb 3 05:38:24 2005
@@ -130,10 +130,10 @@
* Convert a URL-encoded string to canonical form.
* It decodes characters which need not be encoded,
* and encodes those which must be encoded, and does not touch
- * those which must not be touched.
+ * those which must not be touched.
*/
PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
- int isenc)
+ int forcedec, int proxyreq)
{
int i, j, ch;
char *y;
@@ -174,8 +174,11 @@
y[j] = ch;
continue;
}
-/* decode it if not already done */
- if (isenc && ch == '%') {
+/*
+ * decode it if not already done. do not decode reverse proxied URLs
+ * unless specifically forced
+ */
+ if ((forcedec || (proxyreq && proxyreq != PROXYREQ_REVERSE)) && ch == '%') {
if (!apr_isxdigit(x[i + 1]) || !apr_isxdigit(x[i + 2]))
return NULL;
ch = ap_proxy_hex2c(&x[i + 1]);
@@ -238,12 +241,12 @@
strp = strchr(user, ':');
if (strp != NULL) {
*strp = '\0';
- password = ap_proxy_canonenc(p, strp + 1, strlen(strp + 1), enc_user, 1);
+ password = ap_proxy_canonenc(p, strp + 1, strlen(strp + 1), enc_user, 1, 0);
if (password == NULL)
return "Bad %-escape in URL (password)";
}
- user = ap_proxy_canonenc(p, user, strlen(user), enc_user, 1);
+ user = ap_proxy_canonenc(p, user, strlen(user), enc_user, 1, 0);
if (user == NULL)
return "Bad %-escape in URL (username)";
}
Re: svn commit: r151153 - in httpd/httpd/trunk: CHANGES modules/proxy/mod_proxy.c modules/proxy/mod_proxy.h modules/proxy/proxy_ajp.c modules/proxy/proxy_ftp.c modules/proxy/proxy_http.c modules/proxy/proxy_util.c
Posted by Justin Erenkrantz <ju...@erenkrantz.com>.
On Thu, Feb 03, 2005 at 01:38:26PM -0000, jim@apache.org wrote:
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Thu Feb 3 05:38:24 2005
> @@ -1,4 +1,3 @@
> -#define FIX_15207
> /* Copyright 1999-2004 The Apache Software Foundation
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
Is there any reason to keep the #ifdef FIX_15207's in mod_proxy.c? -- justin