Any thoughts on this patch? It looks OK to me, but I'd like another pair or two of eyes to see it.
Didn't get much feedback on new-httpd. Like zero. Cuck Begin forwarded message: > From: Alan Post <[EMAIL PROTECTED]> > Date: Thu Feb 08, 2001 04:10:59 AM US/Eastern > To: [email protected] > Subject: [PATCH] 1.3: fix PR 3489, NoProxy/mod_rewrite problem > Delivered-To: [EMAIL PROTECTED] > Delivered-To: mailing list [email protected] > Delivered-To: moderator for [email protected] > X-Received: 8 Feb 2001 09:33:50 GMT > Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm > List-Help: <mailto:[EMAIL PROTECTED]> > List-Unsubscribe: <mailto:[EMAIL PROTECTED]> > List-Post: <mailto:[email protected]> > Content-Disposition: inline > User-Agent: Mutt/1.2i > X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N > X-Uidl: OoJn-tHkID1AUAE > > > > This patch is filed as a change request, PR #7143. I am running into this > problem, and would appreciate one of the mod_proxy developers taking a look > at > the patch. > > Thanks for the great software. > > Alan Post > > >Class: change-request > >Arrival-Date: Sun Jan 28 10:30:01 PST 2001 > >Originator: [EMAIL PROTECTED] > >Release: apache-1.3_20010127111201 > > >Environment: > uname -a: SunOS oiler 5.6 Generic_105181-07 sun4u sparc > SUNW,UltraSPARC-IIi-Engine > > gcc 2.8.1 > > >Description: > NoProxy doesn't work properly with RewriteRule [P]. This is filed as PR > 3489. > > I believe there are two problems with NoProxy and mod_rewrite: > > 1. NoProxy looks at r->hostname, which is set from the original request, and > may not be correct after the RewriteRule. I propose fixing this by > invalidating r->hostname on RewriteRule [P], and on ProxyPass (for the > same reason). > 2. If r->hostname is NULL, NoProxy looks at r->uri to extract the hostname > of the destination of the request. However, r->filename is what is > actually used to make the proxy request, and r->filename is what > RewriteRule [P] sets. I propose changing the NoProxy logic to use > r->filename instead of r->uri. > > >How-To-Repeat: > I used a setup very similar to the one in PR 3489. > > >Fix: > Here are diff -C3 outputs: > > > > *** mod_proxy.c.orig Sun Jan 28 08:35:10 2001 > --- mod_proxy.c Sun Jan 28 09:27:05 2001 > *************** > *** 195,206 **** > for (i = 0; i < conf->aliases->nelts; i++) { > len = alias_match(r->uri, ent[i].fake); > > ! if (len > 0) { > ! r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real, > ! r->uri + len, NULL); > ! r->handler = "proxy-server"; > ! r->proxyreq = PROXY_PASS; > ! return OK; > } > } > return DECLINED; > --- 195,207 ---- > for (i = 0; i < conf->aliases->nelts; i++) { > len = alias_match(r->uri, ent[i].fake); > > ! if (len > 0) { > ! r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real, > ! r->uri + len, NULL); > ! r->handler = "proxy-server"; > ! r->proxyreq = PROXY_PASS; > ! r->hostname = NULL; > ! return OK; > } > } > return DECLINED; > *** proxy_util.c.orig Sun Jan 28 08:35:26 2001 > --- proxy_util.c Sun Jan 28 08:40:56 2001 > *************** > *** 906,915 **** > if (r->hostname != NULL) > return r->hostname; > > ! /* Set url to the first char after "scheme://" */ > ! if ((url = strchr(r->uri, ':')) == NULL > ! || url[1] != '/' || url[2] != '/') > ! return NULL; > > url = ap_pstrdup(r->pool, &url[1]); /* make it point to "//", > which is what > proxy_canon_netloc expects */ > > --- 906,916 ---- > if (r->hostname != NULL) > return r->hostname; > > ! /* Set url to the first char after "proxy:scheme://" */ > ! if ((url = strchr(r->filename, ':')) == NULL > ! || (url = strchr(&url[1], ':')) == NULL > ! || url[1] != '/' || url[2] != '/') > ! return NULL; > > url = ap_pstrdup(r->pool, &url[1]); /* make it point to "//", > which is what > proxy_canon_netloc expects */ > > *** mod_rewrite.c.orig Sun Jan 28 08:35:39 2001 > --- mod_rewrite.c Sun Jan 28 08:38:11 2001 > *************** > *** 1963,1969 **** > * URL-to-filename handler to be sure mod_proxy is triggered > * for this URL later in the Apache API. But make sure it is > * a fully-qualified URL. (If not it is qualified with > ! * ourself). > */ > if (p->flags & RULEFLAG_PROXY) { > fully_qualify_uri(r); > --- 1963,1970 ---- > * URL-to-filename handler to be sure mod_proxy is triggered > * for this URL later in the Apache API. But make sure it is > * a fully-qualified URL. (If not it is qualified with > ! * ourself). Invalidate the hostname field of the request, > ! * since we may be heading to a different host. > */ > if (p->flags & RULEFLAG_PROXY) { > fully_qualify_uri(r); > *************** > *** 1975,1980 **** > --- 1976,1982 ---- > perdir, r->filename); > } > r->filename = ap_pstrcat(r->pool, "proxy:", r->filename, NULL); > + r->hostname = NULL; > return 1; > } > > > > ----- End forwarded message ----- > > Chuck Murcko Topsail Group http://www.topsail.org/
