You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Randy Terbush <ra...@zyzzyva.com> on 1997/07/08 00:48:27 UTC

Re: [PATCH] PR#813,814: obscure proxy stuff

> Looks fine to me ... +1
> 
> Should I start keeping a 1.2.2 status?

+1 Yes, these fixes should be applied to the 1_2_x branch in case 
we have to release a 1.2.2.



> Dean
> 
> On Sun, 6 Jul 1997, Marc Slemko wrote:
> 
> > First problem; if a client sends a Host: header with a different case than
> > "Host:", the proxy won't see it and it will end up with two headers.
> > 
> > Second problem, if you connect to a HTTP/0.9 server, the first line
> > returned will be corrupt because len was tampered with.
> > 
> > Both solutions provided by the submitter. 
> > 
> > Index: modules/proxy/proxy_http.c
> > ===================================================================
> > RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v
> > retrieving revision 1.19
> > diff -c -r1.19 proxy_http.c
> > *** proxy_http.c	1997/06/16 19:32:53	1.19
> > --- proxy_http.c	1997/07/06 22:11:50
> > ***************
> > *** 260,266 ****
> >       for (i=0; i < reqhdrs_arr->nelts; i++)
> >       {
> >   	if (reqhdrs[i].key == NULL || reqhdrs[i].val == NULL
> > ! 	  || !strcmp(reqhdrs[i].key, "Host"))	/* already sent if there */
> >   	    continue;
> >   	bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, "\015\012", NULL);
> >       }
> > --- 260,266 ----
> >       for (i=0; i < reqhdrs_arr->nelts; i++)
> >       {
> >   	if (reqhdrs[i].key == NULL || reqhdrs[i].val == NULL
> > ! 	  || !strcasecmp(reqhdrs[i].key, "Host"))  /* already sent if there */
> >   	    continue;
> >   	bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, "\015\012", NULL);
> >       }
> > ***************
> > *** 331,339 ****
> >    * one type
> >    */
> >       
> > -     len = resp_hdrs->nelts;
> >       hdr = (struct hdr_entry *)resp_hdrs->elts;
> > !     for (i=0; i < len; i++)
> >       {
> >   	if (hdr[i].value[0] == '\0') continue;
> >   	p = hdr[i].field;
> > --- 331,338 ----
> >    * one type
> >    */
> >       
> >       hdr = (struct hdr_entry *)resp_hdrs->elts;
> > !     for (i=0; i < resp_hdrs->nelts; i++)
> >       {
> >   	if (hdr[i].value[0] == '\0') continue;
> >   	p = hdr[i].field;
> > ***************
> > *** 371,378 ****
> >   	    cache = proxy_cache_error(c);
> >   
> >   /* send headers */
> > !     len = resp_hdrs->nelts;
> > !     for (i=0; i < len; i++)
> >       {
> >   	if (hdr[i].field == NULL || hdr[i].value == NULL ||
> >   	    hdr[i].value[0] == '\0') continue;
> > --- 370,376 ----
> >   	    cache = proxy_cache_error(c);
> >   
> >   /* send headers */
> > !     for (i=0; i < resp_hdrs->nelts; i++)
> >       {
> >   	if (hdr[i].field == NULL || hdr[i].value == NULL ||
> >   	    hdr[i].value[0] == '\0') continue;
> > 
> >