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;