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 */
  
  
  

Reply via email to