From: Ryan Tandy Date: Fri, 3 Apr 2020 22:15:27 +0000 (-0700) Subject: ITS#7878 Replace uint32_t with unsigned in back-mdb X-Git-Tag: OPENLDAP_REL_ENG_2_4_50~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f5143f99eeb66d4f5698284391ed7adf6cef9f03;p=thirdparty%2Fopenldap.git ITS#7878 Replace uint32_t with unsigned in back-mdb init.c: align mi_dbenv_flags and flags with mdb_dbi_open, which declares flags as unsigned int. search.c: align mi_rtxn_size with ARG_UINT; adjust ww_ctx.nentries to silence a warning about signed/unsigned comparison. config.c: parse checkpoint config more carefully. Reject negative or unreasonably large values for kbytes and minutes. Ensure both values are parsed successfully before making any changes. Fixes a compilation failure under MinGW, where stdint.h types are not implicitly pulled in by other headers. --- diff --git a/servers/slapd/back-mdb/back-mdb.h b/servers/slapd/back-mdb/back-mdb.h index 527995ac74..904e136fc3 100644 --- a/servers/slapd/back-mdb/back-mdb.h +++ b/servers/slapd/back-mdb/back-mdb.h @@ -66,9 +66,8 @@ struct mdb_info { MDB_env *mi_dbenv; /* DB_ENV parameters */ - /* The DB_ENV can be tuned via DB_CONFIG */ char *mi_dbenv_home; - uint32_t mi_dbenv_flags; + unsigned mi_dbenv_flags; int mi_dbenv_mode; size_t mi_mapsize; @@ -81,10 +80,10 @@ struct mdb_info { int mi_search_stack_depth; int mi_readers; - uint32_t mi_rtxn_size; + unsigned mi_rtxn_size; int mi_txn_cp; - uint32_t mi_txn_cp_min; - uint32_t mi_txn_cp_kbyte; + unsigned mi_txn_cp_min; + unsigned mi_txn_cp_kbyte; struct re_s *mi_txn_cp_task; struct re_s *mi_index_task; diff --git a/servers/slapd/back-mdb/config.c b/servers/slapd/back-mdb/config.c index f1b86c07a0..d59c798d82 100644 --- a/servers/slapd/back-mdb/config.c +++ b/servers/slapd/back-mdb/config.c @@ -521,22 +521,22 @@ mdb_cf_gen( ConfigArgs *c ) } break; case MDB_CHKPT: { - long l; - mdb->mi_txn_cp = 1; - if ( lutil_atolx( &l, c->argv[1], 0 ) != 0 ) { + unsigned cp_kbyte, cp_min; + if ( lutil_atoux( &cp_kbyte, c->argv[1], 0 ) != 0 ) { fprintf( stderr, "%s: " "invalid kbyte \"%s\" in \"checkpoint\".\n", c->log, c->argv[1] ); return 1; } - mdb->mi_txn_cp_kbyte = l; - if ( lutil_atolx( &l, c->argv[2], 0 ) != 0 ) { + if ( lutil_atoux( &cp_min, c->argv[2], 0 ) != 0 ) { fprintf( stderr, "%s: " "invalid minutes \"%s\" in \"checkpoint\".\n", c->log, c->argv[2] ); return 1; } - mdb->mi_txn_cp_min = l; + mdb->mi_txn_cp = 1; + mdb->mi_txn_cp_kbyte = cp_kbyte; + mdb->mi_txn_cp_min = cp_min; /* If we're in server mode and time-based checkpointing is enabled, * submit a task to perform periodic checkpoints. */ diff --git a/servers/slapd/back-mdb/init.c b/servers/slapd/back-mdb/init.c index abbb3334c4..fbde9a3b19 100644 --- a/servers/slapd/back-mdb/init.c +++ b/servers/slapd/back-mdb/init.c @@ -85,7 +85,7 @@ mdb_db_open( BackendDB *be, ConfigReply *cr ) int rc, i; struct mdb_info *mdb = (struct mdb_info *) be->be_private; struct stat stat1; - uint32_t flags; + unsigned flags; char *dbhome; MDB_txn *txn; diff --git a/servers/slapd/back-mdb/search.c b/servers/slapd/back-mdb/search.c index 5024c86563..6677532383 100644 --- a/servers/slapd/back-mdb/search.c +++ b/servers/slapd/back-mdb/search.c @@ -331,7 +331,7 @@ typedef struct ww_ctx { ID key; MDB_val data; int flag; - int nentries; + unsigned nentries; } ww_ctx; /* ITS#7904 if we get blocked while writing results to client,