s4:ldb Add detail to failures in the indexing code
authorAndrew Bartlett <abartlet@samba.org>
Tue, 27 Oct 2009 00:10:49 +0000 (11:10 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 27 Oct 2009 00:32:21 +0000 (11:32 +1100)
source4/lib/ldb/ldb_tdb/ldb_index.c

index 5002de527bf35ccc42e85cb0d1a64a7f57f7e0d5..55c5c9c9528134997aba0ec8c2afe90bac44f186 100644 (file)
@@ -316,6 +316,7 @@ static int ltdb_index_traverse_store(struct tdb_context *tdb, TDB_DATA key, TDB_
 
        dn = ldb_dn_from_ldb_val(module, ldb, &v);
        if (dn == NULL) {
+               ldb_asprintf_errstring(ldb, "Failed to parse index key %*.*s as an LDB DN", (int)v.length, (int)v.length, (const char *)v.data);
                ltdb->idxptr->error = LDB_ERR_OPERATIONS_ERROR;
                return -1;
        }
@@ -334,6 +335,9 @@ int ltdb_index_transaction_commit(struct ldb_module *module)
        struct ltdb_private *ltdb = talloc_get_type(ldb_module_get_private(module), struct ltdb_private);
        int ret;
 
+       struct ldb_context *ldb = ldb_module_get_ctx(module);
+
+       ldb_reset_err_string(ldb);
        if (ltdb->idxptr->itdb) {
                tdb_traverse(ltdb->idxptr->itdb, ltdb_index_traverse_store, module);
                tdb_close(ltdb->idxptr->itdb);
@@ -342,8 +346,10 @@ int ltdb_index_transaction_commit(struct ldb_module *module)
        ret = ltdb->idxptr->error;
 
        if (ret != LDB_SUCCESS) {
-               struct ldb_context *ldb = ldb_module_get_ctx(module);
-               ldb_asprintf_errstring(ldb, "Failed to store index records in transaction commit");
+               if (!ldb_errstring(ldb)) {
+                       ldb_set_errstring(ldb, ldb_strerror(ret));
+               }
+               ldb_asprintf_errstring(ldb, "Failed to store index records in transaction commit: %s", ldb_errstring(ldb));
        }
 
        talloc_free(ltdb->idxptr);