dgaudet     98/02/06 01:11:42

  Modified:    src      CHANGES
               src/modules/standard mod_autoindex.c mod_mime.c
                        mod_negotiation.c
  Log:
  HTTP/1.1 requires x-gzip and gzip encodings be treated
  equivalent, similarly for x-compress and compress.  Apache
  now ignores a leading x- when comparing encodings.  It also
  preserves the encoding the client requests (for example if
  it requests x-gzip, then Apache will respond with x-gzip
  in the Content-Encoding header).
  
  PR:           1772
  Submitted by: Ronald Tschalaer <[EMAIL PROTECTED]>
  Reviewed by:  Dean Gaudet, Roy Fielding (concept)
  
  Revision  Changes    Path
  1.617     +9 -1      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.616
  retrieving revision 1.617
  diff -u -r1.616 -r1.617
  --- CHANGES   1998/02/04 21:23:30     1.616
  +++ CHANGES   1998/02/06 09:11:36     1.617
  @@ -1,5 +1,13 @@
   Changes with Apache 1.3b4
  -  
  +
  +  *) HTTP/1.1 requires x-gzip and gzip encodings be treated
  +     equivalent, similarly for x-compress and compress.  Apache
  +     now ignores a leading x- when comparing encodings.  It also
  +     preserves the encoding the client requests (for example if
  +     it requests x-gzip, then Apache will respond with x-gzip
  +     in the Content-Encoding header).
  +     [Ronald Tschalaer <[EMAIL PROTECTED]>] PR#1772
  +
     *) Fix a memory leak on keep-alive connections.  [Igor Tatarinov]
   
     *) Added mod_so module to support dynamic loading of modules on Unix
  
  
  
  1.66      +12 -0     apache-1.3/src/modules/standard/mod_autoindex.c
  
  Index: mod_autoindex.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v
  retrieving revision 1.65
  retrieving revision 1.66
  diff -u -r1.65 -r1.66
  --- mod_autoindex.c   1998/01/29 20:36:11     1.65
  +++ mod_autoindex.c   1998/02/06 09:11:39     1.66
  @@ -176,6 +176,12 @@
       if (cmd->info == BY_PATH)
        if (!strcmp(to, "**DIRECTORY**"))
            to = "^^DIRECTORY^^";
  +    if (cmd->info == BY_ENCODING) {
  +     str_tolower(to);
  +     if (to[0] == 'x' && to[1] == '-') {
  +         to += 2;
  +     }
  +    }
   
       push_item(((autoindex_config_rec *) d)->alt_list, cmd->info, to, 
cmd->path, alt);
       return NULL;
  @@ -199,6 +205,12 @@
       if (cmd->info == BY_PATH)
        if (!strcmp(to, "**DIRECTORY**"))
            to = "^^DIRECTORY^^";
  +    if (cmd->info == BY_ENCODING) {
  +     str_tolower(to);
  +     if (to[0] == 'x' && to[1] == '-') {
  +         to += 2;
  +     }
  +    }
   
       push_item(((autoindex_config_rec *) d)->icon_list, cmd->info, to, 
cmd->path,
              iconbak);
  
  
  
  1.30      +2 -0      apache-1.3/src/modules/standard/mod_mime.c
  
  Index: mod_mime.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_mime.c,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- mod_mime.c        1998/01/13 23:11:23     1.29
  +++ mod_mime.c        1998/02/06 09:11:39     1.30
  @@ -127,6 +127,8 @@
   {
       if (*ext == '.')
           ++ext;
  +    if ((enc[0] == 'x' || enc[0] == 'X') && enc[1] == '-')
  +        enc += 2;
       table_set(m->encoding_types, ext, enc);
       return NULL;
   }
  
  
  
  1.67      +9 -3      apache-1.3/src/modules/standard/mod_negotiation.c
  
  Index: mod_negotiation.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_negotiation.c,v
  retrieving revision 1.66
  retrieving revision 1.67
  diff -u -r1.66 -r1.67
  --- mod_negotiation.c 1998/01/27 10:00:44     1.66
  +++ mod_negotiation.c 1998/02/06 09:11:40     1.67
  @@ -1468,7 +1468,6 @@
           return;
       }
   
  -
       /* if no Accept: header, leave quality alone (will
        * remain at the default value of 1) */
       if (neg->accept_encodings->nelts == 0) {
  @@ -1483,9 +1482,14 @@
        */
       for (i = 0; i < neg->accept_encodings->nelts; ++i) {
           char *name = accept_recs[i].type_name;
  +        int off = 0;
  +
  +     if (name[0] == 'x' && name[1] == '-')
  +            off = 2;
   
  -        if (!strcmp(name, enc)) {
  +        if (!strcmp(name+off, enc)) {
               variant->encoding_quality = 1;
  +            variant->content_encoding = name;
               return;
           }
       }
  @@ -2192,7 +2196,9 @@
       r->filename = sub_req->filename;
       r->handler = sub_req->handler;
       r->content_type = sub_req->content_type;
  -    r->content_encoding = sub_req->content_encoding;
  +    /* it may have been modified, so that it would match the exact encoding
  +     * requested by the client (i.e. x-gzip vs. gzip) */
  +    r->content_encoding = best->content_encoding;
       r->content_languages = sub_req->content_languages;
       r->content_language = sub_req->content_language;
       r->finfo = sub_req->finfo;
  
  
  

Reply via email to