diff options
-rw-r--r-- | lib/ldb/ldb_tdb/ldb_tdb.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/ldb/ldb_tdb/ldb_tdb.c b/lib/ldb/ldb_tdb/ldb_tdb.c index d3c83f5d57..bcb8f0fb14 100644 --- a/lib/ldb/ldb_tdb/ldb_tdb.c +++ b/lib/ldb/ldb_tdb/ldb_tdb.c @@ -264,6 +264,7 @@ int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flg void *data = ldb_module_get_private(module); struct ltdb_private *ltdb = talloc_get_type(data, struct ltdb_private); TDB_DATA tdb_key, tdb_data; + struct ldb_val ldb_data; int ret = LDB_SUCCESS; tdb_key = ltdb_key(module, msg->dn); @@ -272,12 +273,15 @@ int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flg } ret = ldb_pack_data(ldb_module_get_ctx(module), - msg, (struct ldb_val *)&tdb_data); + msg, &ldb_data); if (ret == -1) { talloc_free(tdb_key.dptr); return LDB_ERR_OTHER; } + tdb_data.dptr = ldb_data.data; + tdb_data.dsize = ldb_data.length; + ret = tdb_store(ltdb->tdb, tdb_key, tdb_data, flgs); if (ret != 0) { ret = ltdb_err_map(tdb_error(ltdb->tdb)); @@ -286,7 +290,7 @@ int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flg done: talloc_free(tdb_key.dptr); - talloc_free(tdb_data.dptr); + talloc_free(ldb_data.data); return ret; } @@ -673,6 +677,7 @@ int ltdb_modify_internal(struct ldb_module *module, void *data = ldb_module_get_private(module); struct ltdb_private *ltdb = talloc_get_type(data, struct ltdb_private); TDB_DATA tdb_key, tdb_data; + struct ldb_val ldb_data; struct ldb_message *msg2; unsigned int i, j, k; int ret = LDB_SUCCESS, idx; @@ -701,7 +706,10 @@ int ltdb_modify_internal(struct ldb_module *module, goto done; } - ret = ldb_unpack_data(ldb_module_get_ctx(module), (struct ldb_val *)&tdb_data, msg2); + ldb_data.data = tdb_data.dptr; + ldb_data.length = tdb_data.dsize; + + ret = ldb_unpack_data(ldb_module_get_ctx(module), &ldb_data, msg2); free(tdb_data.dptr); if (ret == -1) { ret = LDB_ERR_OTHER; |