The branch, master has been updated via f4e25ec lib: Use tdb_storev in gencache via 4d9ff07 dbwrap: Use tdb_storev in dbwrap_ctdb via c27c7d4 tdb: Use tdb_storev in tdb_append via 504b04b tdb: Add tdb_storev via 647e61b tdb: Add tdb_trace_1plusn_rec_flag_ret via 37e644f tdb: Vectorize _tdb_store via f6f4e5e tdb: Vectorize tdb_update_hash via 6295080 tdb: Allow _v variant in tdb_update_hash_cmp via babd543 tdb: Remove unnecessary checks via 4913180 tdb: Do an overflow check via 6dc4e29 tdb: Fix a signed/unsigned hickup via 28f2849 dbwrap_watch: Add dsize to DEBUG, avoid casts from db32a0e dbcheck: Abandon dbcheck if we get an error during a transaction
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit f4e25ec9635d7ea61db011e7ad685b1e0ae61db9 Author: Volker Lendecke <v...@samba.org> Date: Fri Aug 12 20:57:26 2016 +0200 lib: Use tdb_storev in gencache Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> Autobuild-User(master): Ralph Böhme <s...@samba.org> Autobuild-Date(master): Mon Aug 29 22:51:34 CEST 2016 on sn-devel-144 commit 4d9ff07150d316db081d412e958e46bf4b432a05 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 21:12:06 2016 +0200 dbwrap: Use tdb_storev in dbwrap_ctdb Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit c27c7d44fb89c08addc5280944c88787bf18c075 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 20:57:42 2016 +0200 tdb: Use tdb_storev in tdb_append Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 504b04b817d9bc46b638fbf2335fbcac1ed6ce93 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 20:46:07 2016 +0200 tdb: Add tdb_storev Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 647e61b0e8807d3f1f61f5a82cbe761691b61edb Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 20:45:10 2016 +0200 tdb: Add tdb_trace_1plusn_rec_flag_ret Needed for tdb_storev Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 37e644fc20bb77c486d973ed66c7e21ea055a5e1 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 14:11:03 2016 +0200 tdb: Vectorize _tdb_store Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit f6f4e5e6b590d41d7c411e3e406cc629d59f156a Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 13:47:49 2016 +0200 tdb: Vectorize tdb_update_hash Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 629508036113ce3afa5056857716d97ad5a3251d Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 12:37:13 2016 +0200 tdb: Allow _v variant in tdb_update_hash_cmp Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit babd5432ed91dec1b64b966e2a6633b9642a82d5 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 11:31:44 2016 +0200 tdb: Remove unnecessary checks This has already been done in tdb_find() Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 4913180aada29a6118d19f27f3521b8456c5c912 Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 10:49:04 2016 +0200 tdb: Do an overflow check Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 6dc4e294a51532fb4550ac68b4c3f5a5a9bcbf1b Author: Volker Lendecke <v...@samba.org> Date: Wed Aug 10 10:16:05 2016 +0200 tdb: Fix a signed/unsigned hickup Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 28f2849584d550403117004348b7370530a549a7 Author: Volker Lendecke <v...@samba.org> Date: Mon Jul 25 12:59:46 2016 +0200 dbwrap_watch: Add dsize to DEBUG, avoid casts Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: lib/tdb/ABI/{tdb-1.3.5.sigs => tdb-1.3.11.sigs} | 1 + lib/tdb/common/tdb.c | 222 +++++++++++++++++------- lib/tdb/common/tdb_private.h | 5 + lib/tdb/include/tdb.h | 26 +++ lib/tdb/wscript | 2 +- source3/lib/dbwrap/dbwrap_ctdb.c | 18 +- source3/lib/dbwrap/dbwrap_watch.c | 6 +- source3/lib/gencache.c | 19 +- 8 files changed, 208 insertions(+), 91 deletions(-) copy lib/tdb/ABI/{tdb-1.3.5.sigs => tdb-1.3.11.sigs} (97%) Changeset truncated at 500 lines: diff --git a/lib/tdb/ABI/tdb-1.3.5.sigs b/lib/tdb/ABI/tdb-1.3.11.sigs similarity index 97% copy from lib/tdb/ABI/tdb-1.3.5.sigs copy to lib/tdb/ABI/tdb-1.3.11.sigs index 2545c99..48f4278 100644 --- a/lib/tdb/ABI/tdb-1.3.5.sigs +++ b/lib/tdb/ABI/tdb-1.3.11.sigs @@ -52,6 +52,7 @@ tdb_set_logging_function: void (struct tdb_context *, const struct tdb_logging_c tdb_set_max_dead: void (struct tdb_context *, int) tdb_setalarm_sigptr: void (struct tdb_context *, volatile sig_atomic_t *) tdb_store: int (struct tdb_context *, TDB_DATA, TDB_DATA, int) +tdb_storev: int (struct tdb_context *, TDB_DATA, const TDB_DATA *, int, int) tdb_summary: char *(struct tdb_context *) tdb_transaction_cancel: int (struct tdb_context *) tdb_transaction_commit: int (struct tdb_context *) diff --git a/lib/tdb/common/tdb.c b/lib/tdb/common/tdb.c index dd93680..a67d8fb 100644 --- a/lib/tdb/common/tdb.c +++ b/lib/tdb/common/tdb.c @@ -129,16 +129,32 @@ tdb_off_t tdb_find_lock_hash(struct tdb_context *tdb, TDB_DATA key, uint32_t has static TDB_DATA _tdb_fetch(struct tdb_context *tdb, TDB_DATA key); +struct tdb_update_hash_state { + const TDB_DATA *dbufs; + int num_dbufs; + tdb_len_t dbufs_len; +}; + static int tdb_update_hash_cmp(TDB_DATA key, TDB_DATA data, void *private_data) { - TDB_DATA *dbuf = (TDB_DATA *)private_data; + struct tdb_update_hash_state *state = private_data; + unsigned char *dptr = data.dptr; + int i; - if (dbuf->dsize != data.dsize) { + if (state->dbufs_len != data.dsize) { return -1; } - if (memcmp(dbuf->dptr, data.dptr, data.dsize) != 0) { - return -1; + + for (i=0; i<state->num_dbufs; i++) { + TDB_DATA dbuf = state->dbufs[i]; + int ret; + ret = memcmp(dptr, dbuf.dptr, dbuf.dsize); + if (ret != 0) { + return -1; + } + dptr += dbuf.dsize; } + return 0; } @@ -146,10 +162,14 @@ static int tdb_update_hash_cmp(TDB_DATA key, TDB_DATA data, void *private_data) is <= the old data size and the key exists. on failure return -1. */ -static int tdb_update_hash(struct tdb_context *tdb, TDB_DATA key, uint32_t hash, TDB_DATA dbuf) +static int tdb_update_hash(struct tdb_context *tdb, TDB_DATA key, + uint32_t hash, + const TDB_DATA *dbufs, int num_dbufs, + tdb_len_t dbufs_len) { struct tdb_record rec; - tdb_off_t rec_ptr; + tdb_off_t rec_ptr, ofs; + int i; /* find entry */ if (!(rec_ptr = tdb_find(tdb, key, hash, &rec))) @@ -157,26 +177,41 @@ static int tdb_update_hash(struct tdb_context *tdb, TDB_DATA key, uint32_t hash, /* it could be an exact duplicate of what is there - this is * surprisingly common (eg. with a ldb re-index). */ - if (rec.key_len == key.dsize && - rec.data_len == dbuf.dsize && - rec.full_hash == hash && - tdb_parse_record(tdb, key, tdb_update_hash_cmp, &dbuf) == 0) { - return 0; + if (rec.data_len == dbufs_len) { + struct tdb_update_hash_state state = { + .dbufs = dbufs, .num_dbufs = num_dbufs, + .dbufs_len = dbufs_len + }; + int ret; + + ret = tdb_parse_record(tdb, key, tdb_update_hash_cmp, &state); + if (ret == 0) { + return 0; + } } /* must be long enough key, data and tailer */ - if (rec.rec_len < key.dsize + dbuf.dsize + sizeof(tdb_off_t)) { + if (rec.rec_len < key.dsize + dbufs_len + sizeof(tdb_off_t)) { tdb->ecode = TDB_SUCCESS; /* Not really an error */ return -1; } - if (tdb->methods->tdb_write(tdb, rec_ptr + sizeof(rec) + rec.key_len, - dbuf.dptr, dbuf.dsize) == -1) - return -1; + ofs = rec_ptr + sizeof(rec) + rec.key_len; + + for (i=0; i<num_dbufs; i++) { + TDB_DATA dbuf = dbufs[i]; + int ret; - if (dbuf.dsize != rec.data_len) { + ret = tdb->methods->tdb_write(tdb, ofs, dbuf.dptr, dbuf.dsize); + if (ret == -1) { + return -1; + } + ofs += dbuf.dsize; + } + + if (dbufs_len != rec.data_len) { /* update size */ - rec.data_len = dbuf.dsize; + rec.data_len = dbufs_len; return tdb_rec_write(tdb, rec_ptr, &rec); } @@ -491,13 +526,34 @@ tdb_off_t tdb_find_dead(struct tdb_context *tdb, uint32_t hash, return best_rec_ptr; } -static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, - TDB_DATA dbuf, int flag, uint32_t hash) +static int _tdb_storev(struct tdb_context *tdb, TDB_DATA key, + const TDB_DATA *dbufs, int num_dbufs, + int flag, uint32_t hash) { struct tdb_record rec; - tdb_off_t rec_ptr; + tdb_off_t rec_ptr, ofs; + tdb_len_t rec_len, dbufs_len; + int i; int ret = -1; + dbufs_len = 0; + + for (i=0; i<num_dbufs; i++) { + size_t dsize = dbufs[i].dsize; + + dbufs_len += dsize; + if (dbufs_len < dsize) { + tdb->ecode = TDB_ERR_OOM; + goto fail; + } + } + + rec_len = key.dsize + dbufs_len; + if ((rec_len < key.dsize) || (rec_len < dbufs_len)) { + tdb->ecode = TDB_ERR_OOM; + goto fail; + } + /* check for it existing, on insert. */ if (flag == TDB_INSERT) { if (tdb_exists_hash(tdb, key, hash)) { @@ -506,7 +562,8 @@ static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, } } else { /* first try in-place update, on modify or replace. */ - if (tdb_update_hash(tdb, key, hash, dbuf) == 0) { + if (tdb_update_hash(tdb, key, hash, dbufs, num_dbufs, + dbufs_len) == 0) { goto done; } if (tdb->ecode == TDB_ERR_NOEXIST && @@ -526,7 +583,7 @@ static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, tdb_delete_hash(tdb, key, hash); /* we have to allocate some space */ - rec_ptr = tdb_allocate(tdb, hash, key.dsize + dbuf.dsize, &rec); + rec_ptr = tdb_allocate(tdb, hash, rec_len, &rec); if (rec_ptr == 0) { goto fail; @@ -537,17 +594,36 @@ static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, goto fail; rec.key_len = key.dsize; - rec.data_len = dbuf.dsize; + rec.data_len = dbufs_len; rec.full_hash = hash; rec.magic = TDB_MAGIC; + ofs = rec_ptr; + /* write out and point the top of the hash chain at it */ - if (tdb_rec_write(tdb, rec_ptr, &rec) == -1 - || tdb->methods->tdb_write(tdb, rec_ptr+sizeof(rec), - key.dptr, key.dsize) == -1 - || tdb->methods->tdb_write(tdb, rec_ptr+sizeof(rec)+key.dsize, - dbuf.dptr, dbuf.dsize) == -1 - || tdb_ofs_write(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1) { + ret = tdb_rec_write(tdb, ofs, &rec); + if (ret == -1) { + goto fail; + } + ofs += sizeof(rec); + + ret = tdb->methods->tdb_write(tdb, ofs, key.dptr, key.dsize); + if (ret == -1) { + goto fail; + } + ofs += key.dsize; + + for (i=0; i<num_dbufs; i++) { + ret = tdb->methods->tdb_write(tdb, ofs, dbufs[i].dptr, + dbufs[i].dsize); + if (ret == -1) { + goto fail; + } + ofs += dbufs[i].dsize; + } + + ret = tdb_ofs_write(tdb, TDB_HASH_TOP(hash), &rec_ptr); + if (ret == -1) { /* Need to tdb_unallocate() here */ goto fail; } @@ -561,6 +637,12 @@ static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, return ret; } +static int _tdb_store(struct tdb_context *tdb, TDB_DATA key, + TDB_DATA dbuf, int flag, uint32_t hash) +{ + return _tdb_storev(tdb, key, &dbuf, 1, flag, hash); +} + /* store an element in the database, replacing any existing element with the same key @@ -588,50 +670,51 @@ _PUBLIC_ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int return ret; } -/* Append to an entry. Create if not exist. */ -_PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf) +_PUBLIC_ int tdb_storev(struct tdb_context *tdb, TDB_DATA key, + const TDB_DATA *dbufs, int num_dbufs, int flag) { uint32_t hash; - TDB_DATA dbuf; - int ret = -1; + int ret; + + if (tdb->read_only || tdb->traverse_read) { + tdb->ecode = TDB_ERR_RDONLY; + tdb_trace_1plusn_rec_flag_ret(tdb, "tdb_storev", key, + dbufs, num_dbufs, flag, -1); + return -1; + } /* find which hash bucket it is in */ hash = tdb->hash_fn(&key); if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1) return -1; - dbuf = _tdb_fetch(tdb, key); + ret = _tdb_storev(tdb, key, dbufs, num_dbufs, flag, hash); + tdb_trace_1plusn_rec_flag_ret(tdb, "tdb_storev", key, + dbufs, num_dbufs, flag, -1); + tdb_unlock(tdb, BUCKET(hash), F_WRLCK); + return ret; +} - if (dbuf.dptr == NULL) { - dbuf.dptr = (unsigned char *)malloc(new_dbuf.dsize); - } else { - unsigned int new_len = dbuf.dsize + new_dbuf.dsize; - unsigned char *new_dptr; - - /* realloc '0' is special: don't do that. */ - if (new_len == 0) - new_len = 1; - new_dptr = (unsigned char *)realloc(dbuf.dptr, new_len); - if (new_dptr == NULL) { - free(dbuf.dptr); - } - dbuf.dptr = new_dptr; - } +/* Append to an entry. Create if not exist. */ +_PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf) +{ + uint32_t hash; + TDB_DATA dbufs[2]; + int ret = -1; - if (dbuf.dptr == NULL) { - tdb->ecode = TDB_ERR_OOM; - goto failed; - } + /* find which hash bucket it is in */ + hash = tdb->hash_fn(&key); + if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1) + return -1; - memcpy(dbuf.dptr + dbuf.dsize, new_dbuf.dptr, new_dbuf.dsize); - dbuf.dsize += new_dbuf.dsize; + dbufs[0] = _tdb_fetch(tdb, key); + dbufs[1] = new_dbuf; - ret = _tdb_store(tdb, key, dbuf, 0, hash); - tdb_trace_2rec_retrec(tdb, "tdb_append", key, new_dbuf, dbuf); + ret = _tdb_storev(tdb, key, dbufs, 2, 0, hash); + tdb_trace_2rec_retrec(tdb, "tdb_append", key, dbufs[0], dbufs[1]); -failed: tdb_unlock(tdb, BUCKET(hash), F_WRLCK); - SAFE_FREE(dbuf.dptr); + SAFE_FREE(dbufs[0].dptr); return ret; } @@ -790,7 +873,7 @@ static int tdb_free_region(struct tdb_context *tdb, tdb_off_t offset, ssize_t le */ _PUBLIC_ int tdb_wipe_all(struct tdb_context *tdb) { - int i; + uint32_t i; tdb_off_t offset = 0; ssize_t data_len; tdb_off_t recovery_head; @@ -1132,6 +1215,25 @@ void tdb_trace_2rec_flag_ret(struct tdb_context *tdb, const char *op, tdb_trace_end_ret(tdb, ret); } +void tdb_trace_1plusn_rec_flag_ret(struct tdb_context *tdb, const char *op, + TDB_DATA rec, + const TDB_DATA *recs, int num_recs, + unsigned flag, int ret) +{ + char msg[1 + sizeof(ret) * 4]; + int i; + + snprintf(msg, sizeof(msg), " %#x", flag); + tdb_trace_start(tdb); + tdb_trace_write(tdb, op); + tdb_trace_record(tdb, rec); + for (i=0; i<num_recs; i++) { + tdb_trace_record(tdb, recs[i]); + } + tdb_trace_write(tdb, msg); + tdb_trace_end_ret(tdb, ret); +} + void tdb_trace_2rec_retrec(struct tdb_context *tdb, const char *op, TDB_DATA rec1, TDB_DATA rec2, TDB_DATA ret) { diff --git a/lib/tdb/common/tdb_private.h b/lib/tdb/common/tdb_private.h index de8d9e6..7ff29aa 100644 --- a/lib/tdb/common/tdb_private.h +++ b/lib/tdb/common/tdb_private.h @@ -96,6 +96,10 @@ void tdb_trace_1rec_retrec(struct tdb_context *tdb, const char *op, void tdb_trace_2rec_flag_ret(struct tdb_context *tdb, const char *op, TDB_DATA rec1, TDB_DATA rec2, unsigned flag, int ret); +void tdb_trace_1plusn_rec_flag_ret(struct tdb_context *tdb, const char *op, + TDB_DATA rec, + const TDB_DATA *recs, int num_recs, + unsigned flag, int ret); void tdb_trace_2rec_retrec(struct tdb_context *tdb, const char *op, TDB_DATA rec1, TDB_DATA rec2, TDB_DATA ret); #else @@ -108,6 +112,7 @@ void tdb_trace_2rec_retrec(struct tdb_context *tdb, const char *op, #define tdb_trace_1rec_ret(tdb, op, rec, ret) #define tdb_trace_1rec_retrec(tdb, op, rec, ret) #define tdb_trace_2rec_flag_ret(tdb, op, rec1, rec2, flag, ret) +#define tdb_trace_1plusn_rec_flag_ret(tdb, op, rec, recs, num_recs, flag, ret); #define tdb_trace_2rec_retrec(tdb, op, rec1, rec2, ret) #endif /* !TDB_TRACE */ diff --git a/lib/tdb/include/tdb.h b/lib/tdb/include/tdb.h index 8478ca2..e86d267 100644 --- a/lib/tdb/include/tdb.h +++ b/lib/tdb/include/tdb.h @@ -357,6 +357,32 @@ int tdb_delete(struct tdb_context *tdb, TDB_DATA key); */ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag); + +/** + * @brief Store an element in the database. + * + * This replaces any existing element with the same key. + * + * @param[in] tdb The tdb to store the entry. + * + * @param[in] key The key to use to store the entry. + * + * @param[in] dbufs A vector of memory chunks to write + * + * @param[in] num_dbufs Length of the dbufs vector + * + * @param[in] flag The flags to store the key:\n\n + * TDB_INSERT: Don't overwrite an existing entry.\n + * TDB_MODIFY: Don't create a new entry\n + * + * @return 0 on success, -1 on error with error code set. + * + * @see tdb_error() + * @see tdb_errorstr() + */ +int tdb_storev(struct tdb_context *tdb, TDB_DATA key, + const TDB_DATA *dbufs, int num_dbufs, int flag); + /** * @brief Append data to an entry. * diff --git a/lib/tdb/wscript b/lib/tdb/wscript index c854a21..4e52b6c 100644 --- a/lib/tdb/wscript +++ b/lib/tdb/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'tdb' -VERSION = '1.3.10' +VERSION = '1.3.11' blddir = 'bin' diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c index 10f5f50..34aad45 100644 --- a/source3/lib/dbwrap/dbwrap_ctdb.c +++ b/source3/lib/dbwrap/dbwrap_ctdb.c @@ -128,22 +128,14 @@ static NTSTATUS db_ctdb_ltdb_store(struct db_ctdb_ctx *db, struct ctdb_ltdb_header *header, TDB_DATA data) { - TDB_DATA rec; + TDB_DATA recs[2]; int ret; - rec.dsize = data.dsize + sizeof(struct ctdb_ltdb_header); - rec.dptr = (uint8_t *)talloc_size(talloc_tos(), rec.dsize); - - if (rec.dptr == NULL) { - return NT_STATUS_NO_MEMORY; - } - - memcpy(rec.dptr, header, sizeof(struct ctdb_ltdb_header)); - memcpy(sizeof(struct ctdb_ltdb_header) + (uint8_t *)rec.dptr, data.dptr, data.dsize); - - ret = tdb_store(db->wtdb->tdb, key, rec, TDB_REPLACE); + recs[0] = (TDB_DATA) { .dptr = (uint8_t *)header, + .dsize = sizeof(struct ctdb_ltdb_header) }; + recs[1] = data; - talloc_free(rec.dptr); + ret = tdb_storev(db->wtdb->tdb, key, recs, 2, TDB_REPLACE); return (ret == 0) ? NT_STATUS_OK : tdb_error_to_ntstatus(db->wtdb->tdb); diff --git a/source3/lib/dbwrap/dbwrap_watch.c b/source3/lib/dbwrap/dbwrap_watch.c index acc0f1a..00c332f 100644 --- a/source3/lib/dbwrap/dbwrap_watch.c +++ b/source3/lib/dbwrap/dbwrap_watch.c @@ -66,13 +66,13 @@ static bool dbwrap_record_watchers_key_parse( size_t db_id_len; if (wkey.dsize < sizeof(uint32_t)) { - DEBUG(1, ("Invalid watchers key\n")); + DBG_WARNING("Invalid watchers key, dsize=%zu\n", wkey.dsize); return false; } db_id_len = IVAL(wkey.dptr, 0); if (db_id_len > (wkey.dsize - sizeof(uint32_t))) { - DEBUG(1, ("Invalid watchers key, wkey.dsize=%d, " - "db_id_len=%d\n", (int)wkey.dsize, (int)db_id_len)); + DBG_WARNING("Invalid watchers key, wkey.dsize=%zu, " + "db_id_len=%zu\n", wkey.dsize, db_id_len); return false; } if (p_db_id != NULL) { diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c index 84d273e..5af6eb8 100644 --- a/source3/lib/gencache.c +++ b/source3/lib/gencache.c @@ -278,9 +278,9 @@ bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, int ret; fstring hdr; int hdr_len; - char* val; time_t last_stabilize; static int writecount; + TDB_DATA dbufs[2]; if (tdb_data_cmp(string_term_tdb_data(keystr), last_stabilize_key()) == 0) { @@ -311,13 +311,8 @@ bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, return false; -- Samba Shared Repository