dgaudet 97/08/17 23:53:21 Modified: src CHANGES src/modules/proxy proxy_http.c Log: The request to a remote proxy was mangled if it was generated as the result of a ProxyPass directive. URL schemes other than http:// were not supported when ProxyRemote was used. PR#260, PR#656, PR#699, PR#713, PR#812 [Lars Eilebrecht] PR: 260, 656, 699, 713, 812 Submitted by: Lars Eilebrecht Reviewed by: Dean Gaudet, Ralf S. Engelschall Revision Changes Path 1.401 +5 -0 apachen/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apachen/src/CHANGES,v retrieving revision 1.400 retrieving revision 1.401 diff -u -r1.400 -r1.401 --- CHANGES 1997/08/17 15:33:06 1.400 +++ CHANGES 1997/08/18 06:53:18 1.401 @@ -1,5 +1,10 @@ Changes with Apache 1.3a2 + *) The request to a remote proxy was mangled if it was generated as the + result of a ProxyPass directive. URL schemes other than http:// were not + supported when ProxyRemote was used. PR#260, PR#656, PR#699, PR#713, + PR#812 [Lars Eilebrecht] + *) PORT: Apache has need for mutexes to serialize its children around accept. In prior versions either fcntl file locking or flock file locking were used. The method is chosen by the definition of 1.27 +11 -9 apachen/src/modules/proxy/proxy_http.c Index: proxy_http.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/proxy/proxy_http.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- proxy_http.c 1997/08/15 17:59:52 1.26 +++ proxy_http.c 1997/08/18 06:53:20 1.27 @@ -156,6 +156,7 @@ const long int zero=0L; int destport = 0; char *destportstr = NULL; + char *urlptr = NULL; void *sconf = r->server->module_config; proxy_server_conf *conf = @@ -169,19 +170,21 @@ /* We break the URL into host, port, path-search */ - url += 7; /* skip http:// */ + urlptr = strstr(url,"://"); + if (urlptr == NULL) return BAD_REQUEST; + urlptr += 3; destport = DEFAULT_PORT; - p = strchr(url, '/'); + p = strchr(urlptr, '/'); if (p == NULL) { - desthost = pstrdup(pool, url); - url = "/"; + desthost = pstrdup(pool, urlptr); + urlptr = "/"; } else { - char *q = palloc(pool, p-url+1); - memcpy(q, url, p-url); - q[p-url] = '\0'; - url = p; + char *q = palloc(pool, p-urlptr+1); + memcpy(q, urlptr, p-urlptr); + q[p-urlptr] = '\0'; + urlptr = p; desthost = q; } @@ -207,7 +210,6 @@ if (proxyhost != NULL) { - url = r->uri; /* restore original URL */ server.sin_port = htons(proxyport); err = proxy_host2addr(proxyhost, &server_hp); if (err != NULL) return DECLINED; /* try another */