questions for *dbm gurus...  is a switch from 1.3's ndbm usage to
apr-util's built-in sdbm going to hurt anybody (file compatibility)?

is it going to be necessary to let the admin choose the file format
from among the formats supported by apr-util?

how would one easily create rewrite mappings for use with apr-util's
sdbm support?

Index: modules/mappers/config9.m4
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/config9.m4,v
retrieving revision 1.11
diff -u -r1.11 config9.m4
--- modules/mappers/config9.m4  20 May 2002 21:00:27 -0000      1.11
+++ modules/mappers/config9.m4  21 Aug 2002 16:10:02 -0000
@@ -13,9 +13,7 @@
 APACHE_MODULE(userdir, mapping of user requests, , , yes)
 APACHE_MODULE(alias, translation of requests, , , yes)
 
-APACHE_MODULE(rewrite, regex URL translation, , , most, [
-  APR_ADDTO(CFLAGS,-DNO_DBM_REWRITEMAP)
-])
+APACHE_MODULE(rewrite, regex URL translation, , , most)
 
 dnl mod_so should only be built as a static module
 if test "$enable_so" = "yes"; then
Index: modules/mappers/mod_rewrite.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.c,v
retrieving revision 1.124
diff -u -r1.124 mod_rewrite.c
--- modules/mappers/mod_rewrite.c       10 Jul 2002 06:01:10 -0000      1.124
+++ modules/mappers/mod_rewrite.c       21 Aug 2002 16:10:07 -0000
@@ -161,23 +161,6 @@
 **         or not!
 */
 
-    /* The section for the Configure script:
-    * XXX: this needs updating for apache-2.0 configuration method
-     * MODULE-DEFINITION-START
-     * Name: rewrite_module
-     * ConfigStart
-    . ./build/find-dbm-lib
-    if [ "x$found_dbm" = "x1" ]; then
-        echo "      enabling DBM support for mod_rewrite"
-    else
-        echo "      disabling DBM support for mod_rewrite"
-        echo "      (perhaps you need to add -ldbm, -lndbm or -lgdbm to EXTRA_LIBS)"
-        CFLAGS="$CFLAGS -DNO_DBM_REWRITEMAP"
-    fi
-     * ConfigEnd
-     * MODULE-DEFINITION-END
-     */
-
     /* the module (predeclaration) */
 module AP_MODULE_DECLARE_DATA rewrite_module;
 
@@ -444,14 +427,12 @@
         newmap->checkfile = a2+4;
     }
     else if (strncmp(a2, "dbm:", 4) == 0) {
-#ifndef NO_DBM_REWRITEMAP
+        const char *ignored_fname;
+
         newmap->type      = MAPTYPE_DBM;
         newmap->datafile  = a2+4;
-        newmap->checkfile = apr_pstrcat(cmd->pool, a2+4, NDBM_FILE_SUFFIX, NULL);
-#else
-        return apr_pstrdup(cmd->pool, "RewriteMap: cannot use NDBM mapfile, "
-                          "because no NDBM support is compiled in");
-#endif
+        apr_dbm_get_usednames_ex(cmd->pool, "SDBM", newmap->datafile, 
+                                 &newmap->checkfile, &ignored_fname);
     }
     else if (strncmp(a2, "prg:", 4) == 0) {
         newmap->type      = MAPTYPE_PRG;
@@ -2789,7 +2770,6 @@
                 }
             }
             else if (s->type == MAPTYPE_DBM) {
-#ifndef NO_DBM_REWRITEMAP
                 if ((rv = apr_stat(&st, s->checkfile,
                                    APR_FINFO_MIN, r->pool)) != APR_SUCCESS) {
                     ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
@@ -2825,9 +2805,6 @@
                                "-> val=%s", s->name, key, value);
                     return value[0] != '\0' ? value : NULL;
                 }
-#else
-                return NULL;
-#endif
             }
             else if (s->type == MAPTYPE_PRG) {
                 if ((value =
@@ -2946,31 +2923,33 @@
     return value;
 }
 
-#ifndef NO_DBM_REWRITEMAP
 static char *lookup_map_dbmfile(request_rec *r, const char *file, char *key)
 {
-    DBM *dbmfp = NULL;
-    datum dbmkey;
-    datum dbmval;
+    apr_dbm_t *dbmfp = NULL;
+    apr_datum_t dbmkey;
+    apr_datum_t dbmval;
     char *value = NULL;
     char buf[MAX_STRING_LEN];
+    apr_status_t rv;
 
     dbmkey.dptr  = key;
     dbmkey.dsize = strlen(key);
-    if ((dbmfp = dbm_open(file, O_RDONLY, 0666)) != NULL) {
-        dbmval = dbm_fetch(dbmfp, dbmkey);
-        if (dbmval.dptr != NULL) {
+    /* always use SDBM for now; always available since apr-util includes it
+     */
+    if ((rv = apr_dbm_open_ex(&dbmfp, "SDBM", file, APR_DBM_READONLY, 
+                              0 /* irrelevant when reading */, r->pool)) == 
+APR_SUCCESS) {
+        rv = apr_dbm_fetch(dbmfp, dbmkey, &dbmval);
+        if (rv == APR_SUCCESS) {
             memcpy(buf, dbmval.dptr, 
                    dbmval.dsize < sizeof(buf)-1 ? 
                    dbmval.dsize : sizeof(buf)-1  );
             buf[dbmval.dsize] = '\0';
             value = apr_pstrdup(r->pool, buf);
         }
-        dbm_close(dbmfp);
+        apr_dbm_close(dbmfp);
     }
     return value;
 }
-#endif
 
 static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
                                 apr_file_t *fpout, char *key)
Index: modules/mappers/mod_rewrite.h
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.h,v
retrieving revision 1.35
diff -u -r1.35 mod_rewrite.h
--- modules/mappers/mod_rewrite.h       22 Jun 2002 03:36:57 -0000      1.35
+++ modules/mappers/mod_rewrite.h       21 Aug 2002 16:10:07 -0000
@@ -116,6 +116,7 @@
 #include "apr_thread_mutex.h"
 #endif
 #include "apr_optional.h"
+#include "apr_dbm.h"
 #include "ap_config.h"
 
     /* Include from the Apache server ... */
@@ -134,28 +135,6 @@
 #define VARY_KEY "rewrite-Vary"
 #define VARY_KEY_THIS "rewrite-Vary-this"
 
-    /* The NDBM support:
-     * We support only NDBM files.
-     * But we have to stat the file for the mtime,
-     * so we also need to know the file extension
-     */
-#ifndef NO_DBM_REWRITEMAP
-#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) \
-    && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
-#include <db1/ndbm.h>
-#else
-#include <ndbm.h>
-#endif
-#if defined(DBM_SUFFIX)
-#define NDBM_FILE_SUFFIX DBM_SUFFIX
-#elif defined(__FreeBSD__) || (defined(DB_LOCK) && defined(DB_SHMEM))
-#define NDBM_FILE_SUFFIX ".db"
-#else
-#define NDBM_FILE_SUFFIX ".pag"
-#endif
-#endif
-
-
 /*
 **
 **  Some defines
@@ -164,10 +143,6 @@
 
 #define ENVVAR_SCRIPT_URL "SCRIPT_URL"
 #define ENVVAR_SCRIPT_URI "SCRIPT_URI"
-
-#ifndef SUPPORT_DBM_REWRITEMAP
-#define SUPPORT_DBM_REWRITEMAP 0
-#endif
 
 #define REWRITE_FORCED_MIMETYPE_NOTEVAR "rewrite-forced-mimetype"
 

-- 
Jeff Trawick | [EMAIL PROTECTED]
Born in Roswell... married an alien...

Reply via email to