]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.3-20170613
authorWietse Venema <wietse@porcupine.org>
Mon, 12 Jun 2017 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Mon, 3 Jul 2017 22:03:25 +0000 (18:03 -0400)
postfix/src/global/mail_params.c
postfix/src/util/dict_db.c
postfix/src/util/dict_db.h
postfix/src/util/dict_open.c

index adee258486d2ff7f54cd2abc1f27a8837b6182ca..ece9ec071c8d7647371d608b182a0c903d18e142 100644 (file)
@@ -881,7 +881,6 @@ void    mail_params_init()
     check_sgid_group();
     check_overlap();
     dict_db_cache_size = var_db_read_buf;
-    dict_db_home = mystrdup(var_config_dir);
     dict_lmdb_map_size = var_lmdb_map_size;
     inet_windowsize = var_inet_windowsize;
 
index 5dc91738ee919042ee14f7e5f65d5fdd3f145f40..e3d34106074245fea278acf5758b54b8f7e9386d 100644 (file)
@@ -7,7 +7,6 @@
 /*     #include <dict_db.h>
 /*
 /*     extern int dict_db_cache_size;
-/*     extern char *dict_db_home;
 /*
 /*     DEFINE_DICT_DB_CACHE_SIZE;
 /*
@@ -34,9 +33,6 @@
 /*     must therefore be defined in the calling program by invoking
 /*     the DEFINE_DICT_DB_CACHE_SIZE macro at the global level.
 /*
-/*     dict_db_home specifies the default location of the DB_CONFIG
-/*     file with configuration overrides.
-/*
 /*     Arguments:
 /* .IP path
 /*     The database pathname, not including the ".db" suffix.
@@ -572,6 +568,44 @@ static void dict_db_close(DICT *dict)
     dict_free(dict);
 }
 
+#if DB_VERSION_MAJOR > 2
+
+/* dict_db_new_env - workaround for undocumented ./DB_CONFIG read */
+
+static DB_ENV *dict_db_new_env(const char *db_path)
+{
+    VSTRING *db_home_buf;
+    DB_ENV *dbenv;
+    u_int32_t cache_size_gbytes;
+    u_int32_t cache_size_bytes;
+    int     ncache;
+
+    if ((errno = db_env_create(&dbenv, 0)) != 0)
+       msg_fatal("create DB environment: %m");
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 7)
+    if ((errno = dbenv->get_cachesize(dbenv, &cache_size_gbytes,
+                                     &cache_size_bytes, &ncache)) != 0)
+       msg_fatal("get DB cache size: %m");
+    if (cache_size_gbytes == 0 && cache_size_bytes < dict_db_cache_size) {
+       if ((errno = dbenv->set_cache_max(dbenv, cache_size_gbytes,
+                                         dict_db_cache_size)) != 0)
+           msg_fatal("set DB max cache size %d: %m", dict_db_cache_size);
+       if ((errno = dbenv->set_cachesize(dbenv, cache_size_gbytes,
+                                         dict_db_cache_size, ncache)) != 0)
+           msg_fatal("set DB cache size %d: %m", dict_db_cache_size);
+    }
+#endif
+    /* XXX db_home is also the default directory for the .db file. */
+    db_home_buf = vstring_alloc(100);
+    if ((errno = dbenv->open(dbenv, sane_dirname(db_home_buf, db_path),
+                          DB_INIT_MPOOL | DB_CREATE | DB_PRIVATE, 0)) != 0)
+       msg_fatal("open DB environment: %m");
+    vstring_free(db_home_buf);
+    return (dbenv);
+}
+
+#endif
+
 /* dict_db_open - open data base */
 
 static DICT *dict_db_open(const char *class, const char *path, int open_flags,
@@ -590,9 +624,6 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags,
 #endif
 #if DB_VERSION_MAJOR > 2
     DB_ENV *dbenv;
-    u_int32_t cache_size_gbytes;
-    u_int32_t cache_size_bytes;
-    int     ncache;
 
 #endif
 
@@ -698,29 +729,7 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags,
        db_flags |= DB_CREATE;
     if (open_flags & O_TRUNC)
        db_flags |= DB_TRUNCATE;
-    /* Begin fix 20170611 workaround for undocumented ./DB_CONFIG read. */
-    if ((errno = db_env_create(&dbenv, 0)) != 0)
-       msg_fatal("create DB environment: %m");
-#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 7)
-    /* Begin fix 20170612 workaround for invisible cache size limit. */
-    if ((errno = dbenv->get_cachesize(dbenv, &cache_size_gbytes,
-                                     &cache_size_bytes, &ncache)) != 0)
-       msg_fatal("get DB cache size: %m");
-    if (cache_size_gbytes == 0 && cache_size_bytes < dict_db_cache_size) {
-       if ((errno = dbenv->set_cache_max(dbenv, cache_size_gbytes,
-                                         dict_db_cache_size)) != 0)
-           msg_fatal("set DB max cache size %d: %m", dict_db_cache_size);
-       if ((errno = dbenv->set_cachesize(dbenv, cache_size_gbytes,
-                                         dict_db_cache_size, ncache)) != 0)
-           msg_fatal("set DB cache size %d: %m", dict_db_cache_size);
-    }
-    /* End fix 20170612 workaround for invisible cache size limit. */
-#endif
-    if ((errno = dbenv->open(dbenv, dict_db_home,
-                          DB_INIT_MPOOL | DB_CREATE | DB_PRIVATE, 0)) != 0)
-       msg_fatal("open DB environment: %m");
-    /* End fix 20170611 workaround for undocumented ./DB_CONFIG read. */
-    if ((errno = db_create(&db, dbenv, 0)) != 0)
+    if ((errno = db_create(&db, dbenv = dict_db_new_env(db_path), 0)) != 0)
        msg_fatal("create DB database: %m");
     if (db == 0)
        msg_panic("db_create null result");
index 862685332db4c537dd815eec2388c4a96558ee9f..9b5f6cada00783552c77817166bbc9d1971ef6d5 100644 (file)
@@ -33,10 +33,8 @@ extern DICT *dict_btree_open(const char *, int, int);
   * set a larger memory pool for database (re)builds.
   */
 extern int dict_db_cache_size;
-extern char *dict_db_home;
 
 #define DEFINE_DICT_DB_CACHE_SIZE int dict_db_cache_size = (128 * 1024)
-#define DEFINE_DICT_DB_HOME char *dict_db_home = "/"
 
 /* LICENSE
 /* .ad
index 8328296a5081bd6fb5f87788570adfefa60c2a39..bc33174ea4d048b9dac9cda6e40eb91d63b6598b 100644 (file)
@@ -395,7 +395,6 @@ static DICT_MAPNAMES_EXTEND_FN dict_mapnames_extend_hook;
   */
 DEFINE_DICT_LMDB_MAP_SIZE;
 DEFINE_DICT_DB_CACHE_SIZE;
-DEFINE_DICT_DB_HOME;
 
 /* dict_open_init - one-off initialization */