rse 99/10/27 00:56:24
Modified: src CHANGES src/modules/standard mod_rewrite.c Log: Make sure mod_rewrite matches URL schemes case-insensitive and also allow additional (commonly used) URL schemes ldap:, news: and mailto:. Requested by: Klaus Johannes Rusch <[EMAIL PROTECTED]> Submitted by: Ralf S. Engelschall Reviewed by: Ralf S. Engelschall PR: 3140 Revision Changes Path 1.1440 +4 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1439 retrieving revision 1.1440 diff -u -r1.1439 -r1.1440 --- CHANGES 1999/10/27 07:38:45 1.1439 +++ CHANGES 1999/10/27 07:56:17 1.1440 @@ -1,5 +1,9 @@ Changes with Apache 1.3.10 + *) Make sure mod_rewrite matches URL schemes case-insensitive and also allow + additional (commonly used) URL schemes ldap:, news: and mailto:. + [Ralf S. Engelschall, Klaus Johannes Rusch <[EMAIL PROTECTED]>] PR#3140 + *) Overhauled ApacheBench (ab) manpage ab.8. [Simon Baldwin <[EMAIL PROTECTED]>] PR#5139 1.146 +37 -16 apache-1.3/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v retrieving revision 1.145 retrieving revision 1.146 diff -u -r1.145 -r1.146 --- mod_rewrite.c 1999/10/21 20:45:36 1.145 +++ mod_rewrite.c 1999/10/27 07:56:22 1.146 @@ -1131,13 +1131,19 @@ return OK; } else if ( (strlen(r->filename) > 7 && - strncasecmp(r->filename, "http://", 7) == 0) + strncasecmp(r->filename, "http://", 7) == 0) || (strlen(r->filename) > 8 && - strncasecmp(r->filename, "https://", 8) == 0) + strncasecmp(r->filename, "https://", 8) == 0) || (strlen(r->filename) > 9 && strncasecmp(r->filename, "gopher://", 9) == 0) || (strlen(r->filename) > 6 && - strncasecmp(r->filename, "ftp://", 6) == 0) ) { + strncasecmp(r->filename, "ftp://", 6) == 0) + || (strlen(r->filename) > 5 && + strncasecmp(r->filename, "ldap:", 5) == 0) + || (strlen(r->filename) > 5 && + strncasecmp(r->filename, "news:", 5) == 0) + || (strlen(r->filename) > 7 && + strncasecmp(r->filename, "mailto:", 7) == 0)) { /* it was finally rewritten to a remote URL */ /* skip 'scheme:' */ @@ -1391,13 +1397,19 @@ return OK; } else if ( (strlen(r->filename) > 7 && - strncmp(r->filename, "http://", 7) == 0) + strncasecmp(r->filename, "http://", 7) == 0) || (strlen(r->filename) > 8 && - strncmp(r->filename, "https://", 8) == 0) + strncasecmp(r->filename, "https://", 8) == 0) || (strlen(r->filename) > 9 && - strncmp(r->filename, "gopher://", 9) == 0) + strncasecmp(r->filename, "gopher://", 9) == 0) || (strlen(r->filename) > 6 && - strncmp(r->filename, "ftp://", 6) == 0) ) { + strncasecmp(r->filename, "ftp://", 6) == 0) + || (strlen(r->filename) > 5 && + strncasecmp(r->filename, "ldap:", 5) == 0) + || (strlen(r->filename) > 5 && + strncasecmp(r->filename, "news:", 5) == 0) + || (strlen(r->filename) > 7 && + strncasecmp(r->filename, "mailto:", 7) == 0)) { /* it was finally rewritten to a remote URL */ /* because we are in a per-dir context @@ -2005,10 +2017,13 @@ i = strlen(r->filename); if ( prefixstrip && !( r->filename[0] == '/' - || ( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) - || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) + || ( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) + || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) || (i > 9 && strncasecmp(r->filename, "gopher://", 9) == 0) - || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0)))) { + || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0) + || (i > 5 && strncasecmp(r->filename, "ldap:", 5) == 0) + || (i > 5 && strncasecmp(r->filename, "news:", 5) == 0) + || (i > 7 && strncasecmp(r->filename, "mailto:", 7) == 0)))) { rewritelog(r, 3, "[per-dir %s] add per-dir prefix: %s -> %s%s", perdir, r->filename, perdir, r->filename); r->filename = ap_pstrcat(r->pool, perdir, r->filename, NULL); @@ -2073,10 +2088,13 @@ * directly force an external HTTP redirect. */ i = strlen(r->filename); - if ( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) - || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) + if ( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) + || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) || (i > 9 && strncasecmp(r->filename, "gopher://", 9) == 0) - || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0)) { + || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0) + || (i > 5 && strncasecmp(r->filename, "ldap:", 5) == 0) + || (i > 5 && strncasecmp(r->filename, "news:", 5) == 0) + || (i > 7 && strncasecmp(r->filename, "mailto:", 7) == 0) ) { if (perdir == NULL) { rewritelog(r, 2, "implicitly forcing redirect (rc=%d) with %s", @@ -2433,10 +2451,13 @@ int port; i = strlen(r->filename); - if (!( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) - || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) + if (!( (i > 7 && strncasecmp(r->filename, "http://", 7) == 0) + || (i > 8 && strncasecmp(r->filename, "https://", 8) == 0) || (i > 9 && strncasecmp(r->filename, "gopher://", 9) == 0) - || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0))) { + || (i > 6 && strncasecmp(r->filename, "ftp://", 6) == 0) + || (i > 5 && strncasecmp(r->filename, "ldap:", 5) == 0) + || (i > 5 && strncasecmp(r->filename, "news:", 5) == 0) + || (i > 7 && strncasecmp(r->filename, "mailto:", 7) == 0))) { thisserver = ap_get_server_name(r); port = ap_get_server_port(r);