You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "Ralf S. Engelschall" <rs...@engelschall.com> on 1998/03/03 15:53:01 UTC

[PATCH] Reanimate DBM support for mod_rewrite

This patch fixes the DBM support for RewriteMap's in mod_rewrite
which was broken for a long time (especially because of source code errors).  

I've tested it and it seems to work fine but because I'm not sure if 
the `ConfigStart...ConfigEnd' is really used as it was intended to
be used, I post it here first.

Greetings,
                                       Ralf S. Engelschall
                                       rse@engelschall.com
                                       www.engelschall.com
Index: CHANGES
===================================================================
RCS file: /e/apache/REPOS/apache-1.3/src/CHANGES,v
retrieving revision 1.678
diff -u -r1.678 CHANGES
--- CHANGES	1998/03/03 01:22:03	1.678
+++ CHANGES	1998/03/03 14:42:48
@@ -1,5 +1,11 @@
 Changes with Apache 1.3b6
 
+  *) Fixed the DBM RewriteMap support for mod_rewrite: First the support now
+     is automatically disabled under configure time when the dbm_xxx functions
+     are not available. Second, two heavy source code errors in the DBM
+     support code were fixed.  This makes DBM RewriteMap's useable again after
+     a long time of brokeness. [Ralf S. Engelschall]
+
   *) USE_PTHREAD_SERIALIZED_ACCEPT has proven unreliable depending on
      the rev of Solaris and what mixture of modules are in use.  So
      it has been disabled, and Solaris is back to using
Index: modules/standard/mod_rewrite.c
===================================================================
RCS file: /e/apache/REPOS/apache-1.3/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.78
diff -u -r1.78 mod_rewrite.c
--- mod_rewrite.c	1998/03/02 06:51:19	1.78
+++ mod_rewrite.c	1998/03/03 14:47:51
@@ -157,6 +157,20 @@
 **         or not!
 */
 
+    /* The section for the Configure script:
+     * MODULE-DEFINITION-START
+     * Name: mod_rewrite
+     * ConfigStart
+    if ./helpers/TestCompile func dbm_open; then
+        echo "      enabling DBM support for mod_rewrite"
+    else
+        echo "      disabling DBM support for mod_rewrite"
+        CFLAGS="$CFLAGS -DNO_DBM_REWRITEMAP"
+    fi
+     * ConfigEnd
+     * MODULE-DEFINITION-END
+     */
+
     /* the table of commands we provide */
 static command_rec command_table[] = {
     { "RewriteEngine",   cmd_rewriteengine,   NULL, OR_FILEINFO, FLAG,
@@ -472,7 +486,7 @@
         new->checkfile = a2+4;
     }
     else if (strncmp(a2, "dbm:", 4) == 0) {
-#ifdef HAS_NDBM_LIB
+#ifndef NO_DBM_REWRITEMAP
         new->type      = MAPTYPE_DBM;
         new->datafile  = a2+4;
         new->checkfile = pstrcat(cmd->pool, a2+4, NDBM_FILE_SUFFIX, NULL);
@@ -2519,13 +2533,13 @@
                 }
             }
             else if (s->type == MAPTYPE_DBM) {
-#if HAS_NDBM_LIB
+#ifndef NO_DBM_REWRITEMAP
                 if (stat(s->checkfile, &st) == -1) {
-                    aplog_error(APLOG_MARK, APLOG_ERROR, r->server,
-                                "mod_rewrite: can't access dbm RewriteMap "
-                                "file %s: %s", s->checkfile);
+                    aplog_error(APLOG_MARK, APLOG_ERR, r->server,
+                                "mod_rewrite: can't access DBM RewriteMap "
+                                "file %s", s->checkfile);
                     rewritelog(r, 1,
-                               "can't open RewriteMap file, see error log");
+                               "can't open DBM RewriteMap file, see error log");
                     return NULL;
                 }
                 value = get_cache_string(cachep, s->name, CACHEMODE_TS,
@@ -2660,7 +2674,7 @@
     return value;
 }
 
-#if HAS_NDBM_LIB
+#ifndef NO_DBM_REWRITEMAP
 static char *lookup_map_dbmfile(request_rec *r, char *file, char *key)
 {
     DBM *dbmfp = NULL;
Index: modules/standard/mod_rewrite.h
===================================================================
RCS file: /e/apache/REPOS/apache-1.3/src/modules/standard/mod_rewrite.h,v
retrieving revision 1.40
diff -u -r1.40 mod_rewrite.h
--- mod_rewrite.h	1998/03/02 06:51:20	1.40
+++ mod_rewrite.h	1998/03/03 14:34:28
@@ -95,7 +95,7 @@
      * But we have to stat the file for the mtime,
      * so we also need to know the file extension
      */
-#if HAS_NDBM_LIB
+#ifndef NO_DBM_REWRITEMAP
 #include <ndbm.h>
 #if (__FreeBSD__)
 #define NDBM_FILE_SUFFIX ".db"
@@ -378,7 +378,7 @@
     /* rewrite map support functions */
 static char *lookup_map(request_rec *r, char *name, char *key);
 static char *lookup_map_txtfile(request_rec *r, char *file, char *key);
-#if HAS_NDBM_LIB
+#ifndef NO_DBM_REWRITEMAP
 static char *lookup_map_dbmfile(request_rec *r, char *file, char *key);
 #endif
 static char *lookup_map_program(request_rec *r, int fpin,