]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Fix confused map cache (with maps in different VHs using
authorAndré Malo <nd@apache.org>
Fri, 20 Aug 2004 21:22:25 +0000 (21:22 +0000)
committerAndré Malo <nd@apache.org>
Fri, 20 Aug 2004 21:22:25 +0000 (21:22 +0000)
the same name).

PR: 26462
Reviewed by: Jeff Trawick, Joe Orton

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x@104760 13f79535-47bb-0310-9956-ffa450edef68

src/CHANGES
src/modules/standard/mod_rewrite.c
src/modules/standard/mod_rewrite.h

index 8746b361265b39fea605d41b6e7191ab4f487dea..8421cf5f9ac2b5ea05639d06ca4f1bf80fdd4a46 100644 (file)
@@ -1,5 +1,9 @@
 Changes with Apache 1.3.32
 
+  *) 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]
 
index 86f7d90a880817c6fee0d292a94f94851e9f454f..84779370e0293be21c54e31bf9178f552454cd20 100644 (file)
@@ -449,17 +449,23 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, char *a1,
         new->type      = MAPTYPE_TXT;
         new->datafile  = a2+4;
         new->checkfile = a2+4;
+        new->cachename = ap_psprintf(cmd->pool, "%pp:%s",
+                                     (void *)cmd->server, a1);
     }
     else if (strncmp(a2, "rnd:", 4) == 0) {
         new->type      = MAPTYPE_RND;
         new->datafile  = a2+4;
         new->checkfile = a2+4;
+        new->cachename = ap_psprintf(cmd->pool, "%pp:%s",
+                                     (void *)cmd->server, a1);
     }
     else if (strncmp(a2, "dbm:", 4) == 0) {
 #ifndef NO_DBM_REWRITEMAP
         new->type      = MAPTYPE_DBM;
         new->datafile  = a2+4;
         new->checkfile = ap_pstrcat(cmd->pool, a2+4, NDBM_FILE_SUFFIX, NULL);
+        new->cachename = ap_psprintf(cmd->pool, "%pp:%s",
+                                     (void *)cmd->server, a1);
 #else
         return ap_pstrdup(cmd->pool, "RewriteMap: cannot use NDBM mapfile, "
                           "because no NDBM support is compiled in");
@@ -469,11 +475,13 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, char *a1,
         new->type = MAPTYPE_PRG;
         new->datafile = a2+4;
         new->checkfile = a2+4;
+        new->cachename = NULL;
     }
     else if (strncmp(a2, "int:", 4) == 0) {
         new->type      = MAPTYPE_INT;
         new->datafile  = NULL;
         new->checkfile = NULL;
+        new->cachename = NULL;
         if (strcmp(a2+4, "tolower") == 0) {
             new->func = rewrite_mapfunc_tolower;
         }
@@ -495,6 +503,8 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, char *a1,
         new->type      = MAPTYPE_TXT;
         new->datafile  = a2;
         new->checkfile = a2;
+        new->cachename = ap_psprintf(cmd->pool, "%pp:%s",
+                                     (void *)cmd->server, a1);
     }
     new->fpin  = -1;
     new->fpout = -1;
@@ -2837,7 +2847,7 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                                "see error log");
                     return NULL;
                 }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
+                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                          st.st_mtime, key);
                 if (value == NULL) {
                     rewritelog(r, 6, "cache lookup FAILED, forcing new "
@@ -2846,14 +2856,14 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                          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.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.st_mtime, key, "");
                         return NULL;
                     }
@@ -2874,7 +2884,7 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                                "see error log");
                     return NULL;
                 }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
+                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                          st.st_mtime, key);
                 if (value == NULL) {
                     rewritelog(r, 6,
@@ -2883,14 +2893,14 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                          lookup_map_dbmfile(r, s->datafile, 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.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.st_mtime, key, "");
                         return NULL;
                     }
@@ -2936,7 +2946,7 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                                "see error log");
                     return NULL;
                 }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
+                value = get_cache_string(cachep, s->cachename, CACHEMODE_TS,
                                          st.st_mtime, key);
                 if (value == NULL) {
                     rewritelog(r, 6, "cache lookup FAILED, forcing new "
@@ -2945,13 +2955,13 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                          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.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.st_mtime, key, "");
                         return NULL;
                     }
index c36595b2c7afb29a33ea42e712c087e73d6c43b0..f225cea5773100accd94f784d7e261dd42af1c44 100644 (file)
@@ -232,6 +232,7 @@ typedef struct {
     int   fperr;                   /* err file pointer for program maps */
     char *(*func)(request_rec *,   /* function pointer for internal maps */
                   char *);
+    char *cachename;               /* name for the cache */
 } rewritemap_entry;
 
 typedef struct {