You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by nd...@apache.org on 2004/08/20 23:17:41 UTC

cvs commit: httpd-2.0/modules/mappers mod_rewrite.c mod_rewrite.h

nd          2004/08/20 14:17:41

  Modified:    .        Tag: APACHE_2_0_BRANCH CHANGES STATUS
               modules/mappers Tag: APACHE_2_0_BRANCH mod_rewrite.c
                        mod_rewrite.h
  Log:
  Fix confused map cache (with maps in different VHs using
  the same name).
  
  PR: 26462
  Reviewed by: Jeff Trawick, Joe Orton
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.988.2.325 +4 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.988.2.324
  retrieving revision 1.988.2.325
  diff -u -u -r1.988.2.324 -r1.988.2.325
  --- CHANGES	19 Aug 2004 23:29:39 -0000	1.988.2.324
  +++ CHANGES	20 Aug 2004 21:17:39 -0000	1.988.2.325
  @@ -1,5 +1,9 @@
   Changes with Apache 2.0.51
   
  +  *) mod_rewrite no longer confuses the RewriteMap caches if
  +     different maps defined in different virtual hosts use the
  +     same map name. PR 26462.  [Andr� Malo]
  +
     *) mod_setenvif: Remove "support" for Remote_User variable which
        never worked at all. PR 25725.  [Andr� Malo]
   
  
  
  
  1.751.2.996 +1 -8      httpd-2.0/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/STATUS,v
  retrieving revision 1.751.2.995
  retrieving revision 1.751.2.996
  diff -u -u -r1.751.2.995 -r1.751.2.996
  --- STATUS	20 Aug 2004 18:51:01 -0000	1.751.2.995
  +++ STATUS	20 Aug 2004 21:17:39 -0000	1.751.2.996
  @@ -212,13 +212,6 @@
            server/config.c: r1.175
          +1: nd
   
  -    *) mod_rewrite: Fix confused map cache (with maps in different VHs using
  -       the same name). PR 26462. (2.0 + 1.3)
  -       A patch for 1.3 is here (2.0 goes similar):
  -       <http://www.apache.org/~nd/mod_rewrite-confusion-1.3.patch>
  -         modules/mappers/mod_rewrite.c: r1.256
  -       +1: nd, trawick, jorton
  -
       *) mod_log_config: Cleanup log_header_out function to allow multiple headers
          like Set-Cookie to be logged properly. PR 27787 (2.0 + 1.3)
            modules/loggers/mod_log_config.c: r1.116
  
  
  
  No                   revision
  No                   revision
  1.135.2.27 +19 -9     httpd-2.0/modules/mappers/mod_rewrite.c
  
  Index: mod_rewrite.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.c,v
  retrieving revision 1.135.2.26
  retrieving revision 1.135.2.27
  diff -u -u -r1.135.2.26 -r1.135.2.27
  --- mod_rewrite.c	11 Jun 2004 21:05:22 -0000	1.135.2.26
  +++ mod_rewrite.c	20 Aug 2004 21:17:40 -0000	1.135.2.27
  @@ -402,11 +402,15 @@
           newmap->type      = MAPTYPE_TXT;
           newmap->datafile  = a2+4;
           newmap->checkfile = a2+4;
  +        newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
  +                                         (void *)cmd->server, a1);
       }
       else if (strncmp(a2, "rnd:", 4) == 0) {
           newmap->type      = MAPTYPE_RND;
           newmap->datafile  = a2+4;
           newmap->checkfile = a2+4;
  +        newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
  +                                         (void *)cmd->server, a1);
       }
       else if (strncmp(a2, "dbm", 3) == 0) {
           const char *ignored_fname;
  @@ -414,6 +418,8 @@
           apr_status_t rv;
   
           newmap->type = MAPTYPE_DBM;
  +        newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
  +                                         (void *)cmd->server, a1);
   
           if (a2[3] == ':') {
               newmap->dbmtype    = "default";
  @@ -453,12 +459,14 @@
           apr_tokenize_to_argv(a2 + 4, &newmap->argv, cmd->pool);
           newmap->datafile  = NULL;
           newmap->checkfile = newmap->argv[0];
  +        newmap->cachename = NULL;
   
       }
       else if (strncmp(a2, "int:", 4) == 0) {
           newmap->type      = MAPTYPE_INT;
           newmap->datafile  = NULL;
           newmap->checkfile = NULL;
  +        newmap->cachename = NULL;
           newmap->func      = (char *(*)(request_rec *,char *))
                               apr_hash_get(mapfunc_hash, a2+4, strlen(a2+4));
           if ((sconf->state == ENGINE_ENABLED) && (newmap->func == NULL)) {
  @@ -470,6 +478,8 @@
           newmap->type      = MAPTYPE_TXT;
           newmap->datafile  = a2;
           newmap->checkfile = a2;
  +        newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
  +                                         (void *)cmd->server, a1);
       }
       newmap->fpin  = NULL;
       newmap->fpout = NULL;
  @@ -2965,7 +2975,7 @@
                                  "see error log");
                       return NULL;
                   }
  -                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
  +                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key);
                   if (value == NULL) {
                       rewritelog(r, 6, "cache lookup FAILED, forcing new "
  @@ -2974,14 +2984,14 @@
                            lookup_map_txtfile(r, s->datafile, key)) != NULL) {
                           rewritelog(r, 5, "map lookup OK: map=%s key=%s[txt] "
                                      "-> val=%s", s->name, key, value);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, value);
                           return value;
                       }
                       else {
                           rewritelog(r, 5, "map lookup FAILED: map=%s[txt] "
                                      "key=%s", s->name, key);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, "");
                           return NULL;
                       }
  @@ -3002,7 +3012,7 @@
                                  "see error log");
                       return NULL;
                   }
  -                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
  +                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key);
                   if (value == NULL) {
                       rewritelog(r, 6,
  @@ -3011,14 +3021,14 @@
                            lookup_map_dbmfile(r, s->datafile, s->dbmtype, key)) != NULL) {
                           rewritelog(r, 5, "map lookup OK: map=%s[dbm] key=%s "
                                      "-> val=%s", s->name, key, value);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, value);
                           return value;
                       }
                       else {
                           rewritelog(r, 5, "map lookup FAILED: map=%s[dbm] "
                                      "key=%s", s->name, key);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, "");
                           return NULL;
                       }
  @@ -3062,7 +3072,7 @@
                                  "see error log");
                       return NULL;
                   }
  -                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
  +                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key);
                   if (value == NULL) {
                       rewritelog(r, 6, "cache lookup FAILED, forcing new "
  @@ -3071,13 +3081,13 @@
                            lookup_map_txtfile(r, s->datafile, key)) != NULL) {
                           rewritelog(r, 5, "map lookup OK: map=%s key=%s[txt] "
                                      "-> val=%s", s->name, key, value);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, value);
                       }
                       else {
                           rewritelog(r, 5, "map lookup FAILED: map=%s[txt] "
                                      "key=%s", s->name, key);
  -                        set_cache_string(cachep, s->name, CACHEMODE_TS,
  +                        set_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                            st.mtime, key, "");
                           return NULL;
                       }
  
  
  
  1.39.2.10 +4 -3      httpd-2.0/modules/mappers/mod_rewrite.h
  
  Index: mod_rewrite.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.h,v
  retrieving revision 1.39.2.9
  retrieving revision 1.39.2.10
  diff -u -u -r1.39.2.9 -r1.39.2.10
  --- mod_rewrite.h	9 Feb 2004 20:53:18 -0000	1.39.2.9
  +++ mod_rewrite.h	20 Aug 2004 21:17:41 -0000	1.39.2.10
  @@ -186,12 +186,13 @@
       const char *dbmtype;           /* dbm type for dbm map data files */
       const char *checkfile;         /* filename to check for map existence */
       int   type;                    /* the type of the map */
  -    apr_file_t *fpin;               /* in  file pointer for program maps */
  -    apr_file_t *fpout;              /* out file pointer for program maps */
  -    apr_file_t *fperr;              /* err file pointer for program maps */
  +    apr_file_t *fpin;              /* in  file pointer for program maps */
  +    apr_file_t *fpout;             /* out file pointer for program maps */
  +    apr_file_t *fperr;             /* err file pointer for program maps */
       char *(*func)(request_rec *,   /* function pointer for internal maps */
                     char *);
       char **argv;
  +    char *cachename;               /* name for the cache */
   } rewritemap_entry;
   
   typedef struct {