r12534: Make the transaction code fill the error string on failure.
authorAndrew Bartlett <abartlet@samba.org>
Wed, 28 Dec 2005 04:14:58 +0000 (04:14 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:47:53 +0000 (13:47 -0500)
Andrew Bartlett
(This used to be commit 2f54d7f774434f2a8b89ae01e993c4a1d16ce861)

source4/lib/ldb/common/ldb.c

index 3dc62fd4d635e9157bd255a66def027fce5f7a42..6095f4fc04ce2a7efea971a8f31857083b5012ad 100644 (file)
@@ -126,13 +126,22 @@ static void ldb_reset_err_string(struct ldb_context *ldb)
 int ldb_transaction_start(struct ldb_context *ldb)
 {
        struct ldb_module *module;
+       int status;
        FIRST_OP(ldb, start_transaction);
        
        ldb->transaction_active++;
 
        ldb_reset_err_string(ldb);
 
-       return module->ops->start_transaction(module);
+       status = module->ops->start_transaction(module);
+       if (status != LDB_SUCCESS) {
+               if (ldb->err_string == NULL) {
+                       /* no error string was setup by the backend */
+                       ldb_set_errstring(ldb->modules, 
+                                         talloc_asprintf(ldb, "ldb transaction start error %d", status));
+               }
+       }
+       return status;
 }
 
 /*
@@ -141,6 +150,7 @@ int ldb_transaction_start(struct ldb_context *ldb)
 int ldb_transaction_commit(struct ldb_context *ldb)
 {
        struct ldb_module *module;
+       int status;
        FIRST_OP(ldb, end_transaction);
 
        if (ldb->transaction_active > 0) {
@@ -151,7 +161,15 @@ int ldb_transaction_commit(struct ldb_context *ldb)
 
        ldb_reset_err_string(ldb);
 
-       return module->ops->end_transaction(module);
+       status = module->ops->end_transaction(module);
+       if (status != LDB_SUCCESS) {
+               if (ldb->err_string == NULL) {
+                       /* no error string was setup by the backend */
+                       ldb_set_errstring(ldb->modules, 
+                                         talloc_asprintf(ldb, "ldb transaction commit error %d", status));
+               }
+       }
+       return status;
 }
 
 /*
@@ -160,6 +178,7 @@ int ldb_transaction_commit(struct ldb_context *ldb)
 int ldb_transaction_cancel(struct ldb_context *ldb)
 {
        struct ldb_module *module;
+       int status;
        FIRST_OP(ldb, del_transaction);
 
        if (ldb->transaction_active > 0) {
@@ -168,7 +187,15 @@ int ldb_transaction_cancel(struct ldb_context *ldb)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       return module->ops->del_transaction(module);
+       status = module->ops->del_transaction(module);
+       if (status != LDB_SUCCESS) {
+               if (ldb->err_string == NULL) {
+                       /* no error string was setup by the backend */
+                       ldb_set_errstring(ldb->modules, 
+                                         talloc_asprintf(ldb, "ldb transaction cancel error %d", status));
+               }
+       }
+       return status;
 }
 
 /*