From bbdf47a9252040a5e42e015cb636380b88e9caa8 Mon Sep 17 00:00:00 2001 From: Thierry Bordaz 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