Commit 1302b2ab authored by Andre Malo's avatar Andre Malo
Browse files

Fix confused map cache (with maps in different VHs using

the same name).

PR: 26462
Reviewed by: Jeff Trawick, Joe Orton


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/APACHE_2_0_BRANCH@104759 13f79535-47bb-0310-9956-ffa450edef68
parent 9815e532
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
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 −8
Changes for STATUS: 1 added line, 8 removed lines.
Original line number Diff line number Diff line
APACHE 2.0 STATUS:                                              -*-text-*-
Last modified at [$Date: 2004/08/20 18:51:01 $]
Last modified at [$Date: 2004/08/20 21:17:39 $]

Release:

@@ -212,13 +212,6 @@ PATCHES TO BACKPORT FROM 2.1
         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
+19 −9
Changes for modules/mappers/mod_rewrite.c: 19 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -402,11 +402,15 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
        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 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
        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 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
        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 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
        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 @@ 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.mtime, key);
                if (value == NULL) {
                    rewritelog(r, 6, "cache lookup FAILED, forcing new "
@@ -2974,14 +2984,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.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 @@ 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.mtime, key);
                if (value == NULL) {
                    rewritelog(r, 6,
@@ -3011,14 +3021,14 @@ static char *lookup_map(request_rec *r, char *name, char *key)
                         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 @@ 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.mtime, key);
                if (value == NULL) {
                    rewritelog(r, 6, "cache lookup FAILED, forcing new "
@@ -3071,13 +3081,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.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 −0
Changes for modules/mappers/mod_rewrite.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -192,6 +192,7 @@ typedef struct {
    char *(*func)(request_rec *,   /* function pointer for internal maps */
                  char *);
    char **argv;
    char *cachename;               /* name for the cache */
} rewritemap_entry;

typedef struct {