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 2003/11/17 18:14:53 UTC

cvs commit: apache-1.3/src/main http_core.c

jim         2003/11/17 09:14:53

  Modified:    src      CHANGES
               src/main http_core.c
  Log:
  Make UseCanonicalName off correctly grab port info from
  the client. Make UseCanonicalName socket port aware.
  
  Revision  Changes    Path
  1.1912    +3 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1911
  retrieving revision 1.1912
  diff -u -r1.1911 -r1.1912
  --- CHANGES	12 Nov 2003 19:55:15 -0000	1.1911
  +++ CHANGES	17 Nov 2003 17:14:52 -0000	1.1912
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3.30
   
  +  *) UseCanonicalName off was ignoring the client provided
  +     port information. [Jim Jagielski]
  +
   Changes with Apache 1.3.29
   
     *) SECURITY: CAN-2003-0542 (cve.mitre.org)
  
  
  
  1.327     +16 -5     apache-1.3/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v
  retrieving revision 1.326
  retrieving revision 1.327
  diff -u -r1.326 -r1.327
  --- http_core.c	19 Oct 2003 13:20:57 -0000	1.326
  +++ http_core.c	17 Nov 2003 17:14:53 -0000	1.327
  @@ -826,16 +826,27 @@
   API_EXPORT(unsigned) ap_get_server_port(const request_rec *r)
   {
       unsigned port;
  +    unsigned cport = ntohs(r->connection->local_addr.sin_port);
       core_dir_config *d =
         (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
       
  -    port = r->server->port ? r->server->port : ap_default_port(r);
  -
       if (d->use_canonical_name == USE_CANONICAL_NAME_OFF
  -	|| d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
  -        return r->hostname ? ntohs(r->connection->local_addr.sin_port)
  -			   : port;
  +        || d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
  +        
  +        /* With UseCanonicalName Off Apache will form self-referential
  +         * URLs using the hostname and port supplied by the client if
  +         * any are supplied (otherwise it will use the canonical name).
  +         */
  +        port = r->parsed_uri.port_str ? r->parsed_uri.port : 
  +          cport ? cport :
  +            r->server->port ? r->server->port :
  +              ap_default_port(r);
  +    } else { /* d->use_canonical_name == USE_CANONICAL_NAME_ON */
  +        port = r->server->port ? r->server->port : 
  +          cport ? cport :
  +            ap_default_port(r);
       }
  +
       /* default */
       return port;
   }