Blob Blame History Raw
From bbdf47a9252040a5e42e015cb636380b88e9caa8 Mon Sep 17 00:00:00 2001
From: Thierry Bordaz <tbordaz@redhat.com>
Date: Tue, 18 May 2021 19:16:30 +0200
Subject: [PATCH] Issue 4765 - database suffix unexpectdly changed from .db to
 .db4 (#4766)

* Issue 4765 - database suffix unexpectdly changed from .db to .db4

* Issue 4765 - database suffix unexpectdly changed from .db to .db4 - fix some compilation warnings
---
 ldap/servers/slapd/back-ldbm/back-ldbm.h         |  9 ---------
 ldap/servers/slapd/back-ldbm/db-bdb/bdb_config.c |  1 +
 ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.c  |  5 +++++
 ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.h  | 11 +++++++++++
 ldap/servers/slapd/back-ldbm/dblayer.c           |  9 +++++++++
 ldap/servers/slapd/back-ldbm/dblayer.h           |  3 +++
 ldap/servers/slapd/back-ldbm/proto-back-ldbm.h   |  2 ++
 ldap/servers/slapd/back-ldbm/vlv_srch.c          |  2 +-
 8 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/ldap/servers/slapd/back-ldbm/back-ldbm.h b/ldap/servers/slapd/back-ldbm/back-ldbm.h
index ddac99541..50b0996cb 100644
--- a/ldap/servers/slapd/back-ldbm/back-ldbm.h
+++ b/ldap/servers/slapd/back-ldbm/back-ldbm.h
@@ -66,14 +66,6 @@ typedef unsigned short u_int16_t;
 
 #define ID2ENTRY "id2entry" /* main db file name: ID2ENTRY+LDBM_SUFFIX */
 
-#if 1000 * DB_VERSION_MAJOR + 100 * DB_VERSION_MINOR >= 5000
-#define LDBM_SUFFIX_OLD ".db4"
-#define LDBM_SUFFIX     ".db"
-#else
-#define LDBM_SUFFIX_OLD ".db3"
-#define LDBM_SUFFIX     ".db4"
-#endif
-
 #define MEGABYTE (1024 * 1024)
 #define GIGABYTE (1024 * MEGABYTE)
 
@@ -143,7 +135,6 @@ typedef unsigned short u_int16_t;
 #define LDBM_VERSION_40   "Netscape-ldbm/4.0"
 #define LDBM_VERSION_30   "Netscape-ldbm/3.0"
 #define LDBM_VERSION_31   "Netscape-ldbm/3.1"
-#define LDBM_FILENAME_SUFFIX LDBM_SUFFIX
 #define DBVERSION_FILENAME "DBVERSION"
 /* 0 here means to let the autotuning reset the value on first run */
 /* cache can't get any smaller than this (in bytes) */
diff --git a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_config.c b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_config.c
index 65a2405d8..11a65e806 100644
--- a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_config.c
+++ b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_config.c
@@ -125,6 +125,7 @@ int bdb_init(struct ldbminfo *li, config_info *config_array)
     priv->dblayer_dbi_txn_abort_fn = &bdb_dbi_txn_abort;
     priv->dblayer_get_entries_count_fn = &bdb_get_entries_count;
     priv->dblayer_cursor_get_count_fn = &bdb_public_cursor_get_count;
+    priv->dblayer_get_db_suffix_fn = &bdb_public_get_db_suffix;
 
     bdb_fake_priv = *priv; /* Copy the callbaks for bdb_be() */
     return 0;
diff --git a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.c b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.c
index 186c11cc3..455596a92 100644
--- a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.c
+++ b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.c
@@ -6713,3 +6713,8 @@ bdb_public_cursor_get_count(dbi_cursor_t *cursor, dbi_recno_t *count)
     int rc = cur->c_count(cur, count, 0);
     return bdb_map_error(__FUNCTION__, rc);
 }
+
+const char *bdb_public_get_db_suffix(void)
+{
+    return LDBM_FILENAME_SUFFIX;
+}
diff --git a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.h b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.h
index 32430e2af..924656998 100644
--- a/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.h
+++ b/ldap/servers/slapd/back-ldbm/db-bdb/bdb_layer.h
@@ -13,6 +13,16 @@
 
 #define BDB_CONFIG(li) ((bdb_config *)(li)->li_dblayer_config)
 
+#if 1000 * DB_VERSION_MAJOR + 100 * DB_VERSION_MINOR >= 5000
+#define LDBM_SUFFIX_OLD ".db4"
+#define LDBM_SUFFIX     ".db"
+#else
+#define LDBM_SUFFIX_OLD ".db3"
+#define LDBM_SUFFIX     ".db4"
+#endif
+
+#define LDBM_FILENAME_SUFFIX LDBM_SUFFIX
+
 typedef struct bdb_db_env
 {
     DB_ENV *bdb_DB_ENV;
@@ -133,6 +143,7 @@ dblayer_dbi_txn_commit_fn_t bdb_dbi_txn_commit;
 dblayer_dbi_txn_abort_fn_t bdb_dbi_txn_abort;
 dblayer_get_entries_count_fn_t bdb_get_entries_count;
 dblayer_cursor_get_count_fn_t bdb_public_cursor_get_count;
+dblayer_get_db_suffix_fn_t bdb_public_get_db_suffix;
 
 /* instance functions */
 int bdb_instance_cleanup(struct ldbm_instance *inst);
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
index c5ff6cba9..bf56df42a 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
@@ -1370,3 +1370,12 @@ dblayer_pop_pvt_txn(void)
     }
     return;
 }
+
+const char *
+dblayer_get_db_suffix(Slapi_Backend *be)
+{
+    struct ldbminfo *li = be ? (struct ldbminfo *)be->be_database->plg_private : NULL;
+    dblayer_private *prv = li ? (dblayer_private *)li->li_dblayer_private : NULL;
+
+    return  prv ? prv->dblayer_get_db_suffix_fn() : NULL;
+}
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.h b/ldap/servers/slapd/back-ldbm/dblayer.h
index 99acfd1ab..051035f3f 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.h
+++ b/ldap/servers/slapd/back-ldbm/dblayer.h
@@ -109,6 +109,7 @@ typedef int dblayer_dbi_txn_commit_fn_t(dbi_txn_t *txn);
 typedef int dblayer_dbi_txn_abort_fn_t(dbi_txn_t *txn);
 typedef int dblayer_get_entries_count_fn_t(dbi_db_t *db, int *count);
 typedef int dblayer_cursor_get_count_fn_t(dbi_cursor_t *cursor, dbi_recno_t *count);
+typedef const char *dblayer_get_db_suffix_fn_t(void);
 
 struct dblayer_private
 {
@@ -178,6 +179,7 @@ struct dblayer_private
     dblayer_dbi_txn_abort_fn_t *dblayer_dbi_txn_abort_fn;
     dblayer_get_entries_count_fn_t *dblayer_get_entries_count_fn;
     dblayer_cursor_get_count_fn_t *dblayer_cursor_get_count_fn;
+    dblayer_get_db_suffix_fn_t *dblayer_get_db_suffix_fn;
 };
 
 #define DBLAYER_PRIV_SET_DATA_DIR 0x1
@@ -188,6 +190,7 @@ back_txn *dblayer_get_pvt_txn(void);
 void dblayer_pop_pvt_txn(void);
 
 int dblayer_delete_indices(ldbm_instance *inst);
+const char *dblayer_get_db_suffix(Slapi_Backend *be);
 
 
 /* Return the last four characters of a string; used for comparing extensions. */
diff --git a/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h b/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
index 22f2d1103..dbe5dca73 100644
--- a/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
+++ b/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
@@ -142,6 +142,8 @@ void dblayer_restore_file_update(struct ldbminfo *li, char *directory);
 int dblayer_import_file_init(ldbm_instance *inst);
 void dblayer_import_file_update(ldbm_instance *inst);
 int dblayer_import_file_check(ldbm_instance *inst);
+const char *dblayer_get_db_suffix(Slapi_Backend *be);
+
 
 /*
  * dn2entry.c
diff --git a/ldap/servers/slapd/back-ldbm/vlv_srch.c b/ldap/servers/slapd/back-ldbm/vlv_srch.c
index 4dd3804c9..6fd1b3880 100644
--- a/ldap/servers/slapd/back-ldbm/vlv_srch.c
+++ b/ldap/servers/slapd/back-ldbm/vlv_srch.c
@@ -30,7 +30,6 @@ char *const type_vlvEnabled = "vlvEnabled";
 char *const type_vlvUses = "vlvUses";
 
 static const char *file_prefix = "vlv#"; /* '#' used to avoid collision with real attributes */
-static const char *file_suffix = LDBM_FILENAME_SUFFIX;
 
 static int vlvIndex_createfilename(struct vlvIndex *pIndex, char **ppc);
 
@@ -514,6 +513,7 @@ void
 vlvIndex_init(struct vlvIndex *p, backend *be, struct vlvSearch *pSearch, const Slapi_Entry *e)
 {
     struct ldbminfo *li = (struct ldbminfo *)be->be_database->plg_private;
+    const char *file_suffix = dblayer_get_db_suffix(be);
     char *filename = NULL;
 
     if (NULL == p)
-- 
2.30.2