You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2002/08/21 21:47:16 UTC

cvs commit: httpd-2.0/modules/mappers config9.m4 mod_rewrite.c mod_rewrite.h

trawick     2002/08/21 12:47:15

  Modified:    .        CHANGES
               modules/mappers config9.m4 mod_rewrite.c mod_rewrite.h
  Log:
  Change mod_rewrite to use apr-util's dbm support for dbm rewrite
  maps.
  
  For now, the SDBM dbm flavor is always used.  It won't be compatible
  with dbm rewrite maps built for Apache 1.3 until apr-util supports
  ndbm and mod_rewrite is changed to prefer ndbm over the built-in
  sdbm.
  
  PR:         10644
  
  Revision  Changes    Path
  1.894     +3 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.893
  retrieving revision 1.894
  diff -u -r1.893 -r1.894
  --- CHANGES	21 Aug 2002 17:49:18 -0000	1.893
  +++ CHANGES	21 Aug 2002 19:47:14 -0000	1.894
  @@ -1,5 +1,8 @@
   Changes with Apache 2.0.41
   
  +  *) Change mod_rewrite to use apr-util's dbm support for dbm rewrite
  +     maps.  PR 10644  [Jeff Trawick]
  +
     *) Fixed mod_rewrite's RewriteMap prg: support so that request/response
        pairs will no longer get out of sync with each other.  PR 9534
        [Cliff Woolley]
  
  
  
  1.12      +1 -3      httpd-2.0/modules/mappers/config9.m4
  
  Index: config9.m4
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/mappers/config9.m4,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- config9.m4	20 May 2002 21:00:27 -0000	1.11
  +++ config9.m4	21 Aug 2002 19:47:15 -0000	1.12
  @@ -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
  
  
  
  1.126     +15 -36    httpd-2.0/modules/mappers/mod_rewrite.c
  
  Index: mod_rewrite.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.c,v
  retrieving revision 1.125
  retrieving revision 1.126
  diff -u -r1.125 -r1.126
  --- mod_rewrite.c	21 Aug 2002 17:49:18 -0000	1.125
  +++ mod_rewrite.c	21 Aug 2002 19:47:15 -0000	1.126
  @@ -120,6 +120,8 @@
   #include "unixd.h"
   #endif
   
  +#define DBM_MAP_TYPE "SDBM"
  +
   /*
   ** +-------------------------------------------------------+
   ** |                                                       |
  @@ -161,23 +163,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 +429,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, DBM_MAP_TYPE, newmap->datafile, 
  +                                 &newmap->checkfile, &ignored_fname);
       }
       else if (strncmp(a2, "prg:", 4) == 0) {
           newmap->type      = MAPTYPE_PRG;
  @@ -2789,7 +2772,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 +2807,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 +2925,31 @@
       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) {
  +    if ((rv = apr_dbm_open_ex(&dbmfp, DBM_MAP_TYPE, 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)
  
  
  
  1.37      +1 -26     httpd-2.0/modules/mappers/mod_rewrite.h
  
  Index: mod_rewrite.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.h,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- mod_rewrite.h	21 Aug 2002 17:49:18 -0000	1.36
  +++ mod_rewrite.h	21 Aug 2002 19:47:15 -0000	1.37
  @@ -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"