You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Rodent of Unusual Size <co...@decus.org> on 1997/09/08 04:13:11 UTC

[PATCH] to mod_rewrite to close PR#991 (take 2)

    Okey, this slightly revised version includes a check for the
    condition Ralf suggested (though I armoured the routine called, not
    the call itself).

    For 1.3b1.. 'cuz it fixes a bug :->

    #ken    P-)}

Index: mod_rewrite.c
===================================================================
RCS file: /export/home/cvs/apachen/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.50
diff -u -r1.50 mod_rewrite.c
--- mod_rewrite.c	1997/09/01 02:39:03	1.50
+++ mod_rewrite.c	1997/09/08 02:09:02
@@ -455,9 +455,9 @@
     new->fpin  = 0;
     new->fpout = 0;
 
-    if (new->checkfile)
-        if (stat(new->checkfile, &st) == -1)
-            return pstrcat(cmd->pool, "RewriteMap: map file or program not found:", new->checkfile, NULL);
+    if (new->checkfile && (sconf->state == ENGINE_ENABLED)
+        && (stat(new->checkfile, &st) == -1))
+	return pstrcat(cmd->pool, "RewriteMap: map file or program not found:", new->checkfile, NULL);
 
     return NULL;
 }
@@ -2192,7 +2192,14 @@
         s = &entries[i];
         if (strcmp(s->name, name) == 0) {
             if (s->type == MAPTYPE_TXT) {
-                stat(s->checkfile, &st); /* existence was checked at startup! */
+                if (stat(s->checkfile, &st) == -1) {
+		    log_printf(r->server,
+			       "mod_rewrite: can't access text RewriteMap file %s: %s",
+			       s->checkfile, strerror(errno));
+		    rewritelog(r, 1,
+			       "can't open RewriteMap file, see error log");
+		    return NULL;
+		}
                 value = get_cache_string(cachep, s->name, CACHEMODE_TS, st.st_mtime, key);
                 if (value == NULL) {
                     rewritelog(r, 6, "cache lookup FAILED, forcing new map lookup");
@@ -2213,7 +2220,14 @@
             }
             else if (s->type == MAPTYPE_DBM) {
 #if HAS_NDBM_LIB
-                stat(s->checkfile, &st); /* existence was checked at startup! */
+                if (stat(s->checkfile, &st) == -1) {
+		    log_printf(r->server,
+			       "mod_rewrite: can't access dbm RewriteMap file %s: %s",
+			       s->checkfile, strerror(errno));
+		    rewritelog(r, 1,
+			       "can't open RewriteMap file, see error log");
+		    return NULL;
+		}
                 value = get_cache_string(cachep, s->name, CACHEMODE_TS, st.st_mtime, key);
                 if (value == NULL) {
                     rewritelog(r, 6, "cache lookup FAILED, forcing new map lookup");
@@ -2535,6 +2549,13 @@
     int rc;
   
     conf = get_module_config(s->module_config, &rewrite_module);
+    /*
+     * If the engine isn't turned on, don't even try to do anything.
+     */
+    if (conf->state == ENGINE_DISABLED) {
+	return;
+    }
+    
 
     rewritemaps = conf->rewritemaps;
     entries = (rewritemap_entry *)rewritemaps->elts;