From 63b43dd12fb579aaaccedd07aaa630cb1cd7aa88 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 24 Sep 2005 15:42:15 +0000 Subject: r10477: expose transactions outside ldb and change the API once more do not autostart transactions on ldb operations if a transaction is already in place test transactions on winsdb all my tests passes so far tridge please confirm this is ok for you (This used to be commit c2bb2a36bdbe0ec7519697a9a9ba7526a0defac2) --- source4/lib/ldb/common/ldb.c | 104 ++++++++++++++++++++++-------- source4/lib/ldb/common/ldb_modules.c | 12 +++- source4/lib/ldb/common/ldb_msg.c | 2 +- source4/lib/ldb/include/ldb.h | 15 +++++ source4/lib/ldb/include/ldb_errors.h | 2 +- source4/lib/ldb/include/ldb_private.h | 8 ++- source4/lib/ldb/ldb_ildap/ldb_ildap.c | 14 +++- source4/lib/ldb/ldb_ldap/ldb_ldap.c | 14 +++- source4/lib/ldb/ldb_sqlite3/ldb_sqlite3.c | 56 ++++++++++------ source4/lib/ldb/ldb_tdb/ldb_tdb.c | 44 +++++++------ source4/lib/ldb/modules/ldb_map.c | 12 +++- source4/lib/ldb/modules/rdn_name.c | 13 +++- source4/lib/ldb/modules/schema.c | 11 +++- source4/lib/ldb/modules/skel.c | 11 +++- source4/lib/ldb/modules/timestamps.c | 13 +++- source4/lib/ldb/tools/ldbadd.c | 2 +- 16 files changed, 239 insertions(+), 94 deletions(-) (limited to 'source4/lib/ldb') diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c index a00c2481d8..a743b2f584 100644 --- a/source4/lib/ldb/common/ldb.c +++ b/source4/lib/ldb/common/ldb.c @@ -93,17 +93,17 @@ int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, co return LDB_ERR_OTHER; } - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to connect to '%s'\n", url); return ret; } - if (ldb_load_modules(ldb, options) != LDB_ERR_SUCCESS) { + if (ldb_load_modules(ldb, options) != LDB_SUCCESS) { ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to load modules for '%s'\n", url); return LDB_ERR_OTHER; } - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } static void ldb_reset_err_string(struct ldb_context *ldb) @@ -117,17 +117,45 @@ static void ldb_reset_err_string(struct ldb_context *ldb) /* start a transaction */ -static int ldb_start_trans(struct ldb_context *ldb) +int ldb_transaction_start(struct ldb_context *ldb) { - return ldb->modules->ops->start_transaction(ldb->modules); + ldb->transaction_active++; + + ldb_reset_err_string(ldb); + + return ldb->modules->ops->start_transaction(ldb->modules); } /* - end a transaction + commit a transaction */ -static int ldb_end_trans(struct ldb_context *ldb, int status) +int ldb_transaction_commit(struct ldb_context *ldb) { - return ldb->modules->ops->end_transaction(ldb->modules, status); + if (ldb->transaction_active > 0) { + ldb->transaction_active--; + } else { + return LDB_ERR_OPERATIONS_ERROR; + } + + ldb_reset_err_string(ldb); + + return ldb->modules->ops->end_transaction(ldb->modules); +} + +/* + cancel a transaction +*/ +int ldb_transaction_cancel(struct ldb_context *ldb) +{ + if (ldb->transaction_active > 0) { + ldb->transaction_active--; + } else { + return LDB_ERR_OPERATIONS_ERROR; + } + + ldb_reset_err_string(ldb); + + return ldb->modules->ops->del_transaction(ldb->modules); } /* @@ -180,13 +208,18 @@ int ldb_add(struct ldb_context *ldb, ldb_reset_err_string(ldb); status = ldb_msg_sanity_check(message); - if (status != LDB_ERR_SUCCESS) return status; + if (status != LDB_SUCCESS) return status; - status = ldb_start_trans(ldb); - if (status != LDB_ERR_SUCCESS) return status; + if (! ldb->transaction_active) { + status = ldb_transaction_start(ldb); + if (status != LDB_SUCCESS) return status; - status = ldb->modules->ops->add_record(ldb->modules, message); - return ldb_end_trans(ldb, status); + status = ldb->modules->ops->add_record(ldb->modules, message); + if (status != LDB_SUCCESS) return ldb_transaction_cancel(ldb); + return ldb_transaction_commit(ldb); + } + + return ldb->modules->ops->add_record(ldb->modules, message); } /* @@ -200,13 +233,18 @@ int ldb_modify(struct ldb_context *ldb, ldb_reset_err_string(ldb); status = ldb_msg_sanity_check(message); - if (status != LDB_ERR_SUCCESS) return status; + if (status != LDB_SUCCESS) return status; + + if (! ldb->transaction_active) { + status = ldb_transaction_start(ldb); + if (status != LDB_SUCCESS) return status; - status = ldb_start_trans(ldb); - if (status != LDB_ERR_SUCCESS) return status; + status = ldb->modules->ops->modify_record(ldb->modules, message); + if (status != LDB_SUCCESS) return ldb_transaction_cancel(ldb); + return ldb_transaction_commit(ldb); + } - status = ldb->modules->ops->modify_record(ldb->modules, message); - return ldb_end_trans(ldb, status); + return ldb->modules->ops->modify_record(ldb->modules, message); } @@ -219,11 +257,16 @@ int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn) ldb_reset_err_string(ldb); - status = ldb_start_trans(ldb); - if (status != LDB_ERR_SUCCESS) return status; + if (! ldb->transaction_active) { + status = ldb_transaction_start(ldb); + if (status != LDB_SUCCESS) return status; - status = ldb->modules->ops->delete_record(ldb->modules, dn); - return ldb_end_trans(ldb, status); + status = ldb->modules->ops->delete_record(ldb->modules, dn); + if (status != LDB_SUCCESS) return ldb_transaction_cancel(ldb); + return ldb_transaction_commit(ldb); + } + + return ldb->modules->ops->delete_record(ldb->modules, dn); } /* @@ -235,13 +278,20 @@ int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const struct ldb_reset_err_string(ldb); - status = ldb_start_trans(ldb); - if (status != LDB_ERR_SUCCESS) return status; + if (! ldb->transaction_active) { + status = ldb_transaction_start(ldb); + if (status != LDB_SUCCESS) return status; + + status = ldb->modules->ops->rename_record(ldb->modules, olddn, newdn); + if (status != LDB_SUCCESS) return ldb_transaction_cancel(ldb); + return ldb_transaction_commit(ldb); + } - status = ldb->modules->ops->rename_record(ldb->modules, olddn, newdn); - return ldb_end_trans(ldb, status); + return ldb->modules->ops->rename_record(ldb->modules, olddn, newdn); } + + /* return extended error information */ @@ -269,7 +319,7 @@ int ldb_set_opaque(struct ldb_context *ldb, const char *name, void *value) o->name = name; o->value = value; ldb->opaque = o; - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } /* diff --git a/source4/lib/ldb/common/ldb_modules.c b/source4/lib/ldb/common/ldb_modules.c index e1f5b83083..6802cc8955 100644 --- a/source4/lib/ldb/common/ldb_modules.c +++ b/source4/lib/ldb/common/ldb_modules.c @@ -314,12 +314,20 @@ int ldb_next_start_trans(struct ldb_module *module) return module->next->ops->start_transaction(module->next); } -int ldb_next_end_trans(struct ldb_module *module, int status) +int ldb_next_end_trans(struct ldb_module *module) { if (!module->next) { return -1; } - return module->next->ops->end_transaction(module->next, status); + return module->next->ops->end_transaction(module->next); +} + +int ldb_next_del_trans(struct ldb_module *module) +{ + if (!module->next) { + return -1; + } + return module->next->ops->del_transaction(module->next); } void ldb_set_errstring(struct ldb_module *module, char *err_string) diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c index 1b26d7833b..c2f40f308a 100644 --- a/source4/lib/ldb/common/ldb_msg.c +++ b/source4/lib/ldb/common/ldb_msg.c @@ -527,5 +527,5 @@ int ldb_msg_sanity_check(const struct ldb_message *msg) } } - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h index 0e794c6209..f371c340cc 100644 --- a/source4/lib/ldb/include/ldb.h +++ b/source4/lib/ldb/include/ldb.h @@ -308,6 +308,21 @@ int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const struct */ int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn); +/* + start a transaction +*/ +int ldb_transaction_start(struct ldb_context *ldb); + +/* + commit a transaction +*/ +int ldb_transaction_commit(struct ldb_context *ldb); + +/* + cancel a transaction +*/ +int ldb_transaction_cancel(struct ldb_context *ldb); + /* return extended error information from the last call diff --git a/source4/lib/ldb/include/ldb_errors.h b/source4/lib/ldb/include/ldb_errors.h index 38c42280d0..f59b39f92a 100644 --- a/source4/lib/ldb/include/ldb_errors.h +++ b/source4/lib/ldb/include/ldb_errors.h @@ -40,7 +40,7 @@ * but they are keept here for reference anyway */ -#define LDB_ERR_SUCCESS 0 +#define LDB_SUCCESS 0 #define LDB_ERR_OPERATIONS_ERROR 1 #define LDB_ERR_PROTOCOL_ERROR 2 #define LDB_ERR_TIME_LIMIT_EXCEEDED 3 diff --git a/source4/lib/ldb/include/ldb_private.h b/source4/lib/ldb/include/ldb_private.h index 7eb2bca679..2a9139df40 100644 --- a/source4/lib/ldb/include/ldb_private.h +++ b/source4/lib/ldb/include/ldb_private.h @@ -65,7 +65,8 @@ struct ldb_module_ops { int (*delete_record)(struct ldb_module *, const struct ldb_dn *); int (*rename_record)(struct ldb_module *, const struct ldb_dn *, const struct ldb_dn *); int (*start_transaction)(struct ldb_module *); - int (*end_transaction)(struct ldb_module *, int); + int (*end_transaction)(struct ldb_module *); + int (*del_transaction)(struct ldb_module *); }; @@ -105,6 +106,8 @@ struct ldb_context { struct ldb_schema schema; char *err_string; + + int transaction_active; }; /* the modules init function */ @@ -137,7 +140,8 @@ int ldb_next_modify_record(struct ldb_module *module, const struct ldb_message * int ldb_next_delete_record(struct ldb_module *module, const struct ldb_dn *dn); int ldb_next_rename_record(struct ldb_module *module, const struct ldb_dn *olddn, const struct ldb_dn *newdn); int ldb_next_start_trans(struct ldb_module *module); -int ldb_next_end_trans(struct ldb_module *module, int status); +int ldb_next_end_trans(struct ldb_module *module); +int ldb_next_del_trans(struct ldb_module *module); void ldb_set_errstring(struct ldb_module *module, char *err_string); diff --git a/source4/lib/ldb/ldb_ildap/ldb_ildap.c b/source4/lib/ldb/ldb_ildap/ldb_ildap.c index be51a65c58..ffb812acd0 100644 --- a/source4/lib/ldb/ldb_ildap/ldb_ildap.c +++ b/source4/lib/ldb/ldb_ildap/ldb_ildap.c @@ -373,11 +373,18 @@ static int ildb_start_trans(struct ldb_module *module) return 0; } -static int ildb_end_trans(struct ldb_module *module, int status) +static int ildb_end_trans(struct ldb_module *module) { /* TODO implement a local transaction mechanism here */ - return status; + return 0; +} + +static int ildb_del_trans(struct ldb_module *module) +{ + /* TODO implement a local locking mechanism here */ + + return 0; } static const struct ldb_module_ops ildb_ops = { @@ -389,7 +396,8 @@ static const struct ldb_module_ops ildb_ops = { .delete_record = ildb_delete, .rename_record = ildb_rename, .start_transaction = ildb_start_trans, - .end_transaction = ildb_end_trans + .end_transaction = ildb_end_trans, + .del_transaction = ildb_del_trans }; diff --git a/source4/lib/ldb/ldb_ldap/ldb_ldap.c b/source4/lib/ldb/ldb_ldap/ldb_ldap.c index 2035913f2a..1d1dd66e84 100644 --- a/source4/lib/ldb/ldb_ldap/ldb_ldap.c +++ b/source4/lib/ldb/ldb_ldap/ldb_ldap.c @@ -462,11 +462,18 @@ static int lldb_start_trans(struct ldb_module *module) return 0; } -static int lldb_end_trans(struct ldb_module *module, int status) +static int lldb_end_trans(struct ldb_module *module) { /* TODO implement a local transaction mechanism here */ - return status; + return 0; +} + +static int lldb_del_trans(struct ldb_module *module) +{ + /* TODO implement a local transaction mechanism here */ + + return 0; } static const struct ldb_module_ops lldb_ops = { @@ -478,7 +485,8 @@ static const struct ldb_module_ops lldb_ops = { .delete_record = lldb_delete, .rename_record = lldb_rename, .start_transaction = lldb_start_trans, - .end_transaction = lldb_end_trans + .end_transaction = lldb_end_trans, + .del_transaction = lldb_del_trans }; diff --git a/source4/lib/ldb/ldb_sqlite3/ldb_sqlite3.c b/source4/lib/ldb/ldb_sqlite3/ldb_sqlite3.c index ac706291ef..052b10f245 100644 --- a/source4/lib/ldb/ldb_sqlite3/ldb_sqlite3.c +++ b/source4/lib/ldb/ldb_sqlite3/ldb_sqlite3.c @@ -1065,7 +1065,7 @@ static int lsqlite3_add(struct ldb_module *module, const struct ldb_message *msg } */ /* Others are implicitly ignored */ - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } /* create linearized and normalized dns */ @@ -1155,7 +1155,7 @@ static int lsqlite3_add(struct ldb_module *module, const struct ldb_message *msg } talloc_free(local_ctx); - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; failed: talloc_free(local_ctx); @@ -1191,7 +1191,7 @@ static int lsqlite3_modify(struct ldb_module *module, const struct ldb_message * } /* Others are implicitly ignored */ - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } eid = lsqlite3_get_eid(module, msg->dn); @@ -1346,7 +1346,7 @@ static int lsqlite3_modify(struct ldb_module *module, const struct ldb_message * } talloc_free(local_ctx); - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; failed: talloc_free(local_ctx); @@ -1365,7 +1365,7 @@ static int lsqlite3_delete(struct ldb_module *module, const struct ldb_dn *dn) /* ignore ltdb specials */ if (ldb_dn_is_special(dn)) { - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } /* create a local ctx */ @@ -1402,7 +1402,7 @@ static int lsqlite3_delete(struct ldb_module *module, const struct ldb_dn *dn) } talloc_free(local_ctx); - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; failed: talloc_free(local_ctx); @@ -1421,7 +1421,7 @@ static int lsqlite3_rename(struct ldb_module *module, const struct ldb_dn *olddn /* ignore ltdb specials */ if (ldb_dn_is_special(olddn) || ldb_dn_is_special(newdn)) { - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } /* create a local ctx */ @@ -1462,7 +1462,7 @@ static int lsqlite3_rename(struct ldb_module *module, const struct ldb_dn *olddn /* clean up and exit */ talloc_free(local_ctx); - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; failed: talloc_free(local_ctx); @@ -1491,32 +1491,45 @@ static int lsqlite3_start_trans(struct ldb_module * module) return 0; } -static int lsqlite3_end_trans(struct ldb_module *module, int status) +static int lsqlite3_end_trans(struct ldb_module *module) { int ret; char *errmsg; struct lsqlite3_private *lsqlite3 = module->private_data; - lsqlite3->trans_count--; + if (lsqlite3->trans_count > 0) { + lsqlite3->trans_count--; + } else return -1; if (lsqlite3->trans_count == 0) { - if (status == 0) { - ret = sqlite3_exec(lsqlite3->sqlite, "COMMIT;", NULL, NULL, &errmsg); - if (ret != SQLITE_OK) { - if (errmsg) { - printf("lsqlite3_end_trans: error: %s\n", errmsg); - free(errmsg); - } - return -1; + ret = sqlite3_exec(lsqlite3->sqlite, "COMMIT;", NULL, NULL, &errmsg); + if (ret != SQLITE_OK) { + if (errmsg) { + printf("lsqlite3_end_trans: error: %s\n", errmsg); + free(errmsg); } - } else { - return lsqlite3_safe_rollback(lsqlite3->sqlite); + return -1; } } return 0; } +static int lsqlite3_del_trans(struct ldb_module *module) +{ + struct lsqlite3_private *lsqlite3 = module->private_data; + + if (lsqlite3->trans_count > 0) { + lsqlite3->trans_count--; + } else return -1; + + if (lsqlite3->trans_count == 0) { + return lsqlite3_safe_rollback(lsqlite3->sqlite); + } + + return -1; +} + /* * Static functions */ @@ -1814,7 +1827,8 @@ static const struct ldb_module_ops lsqlite3_ops = { .delete_record = lsqlite3_delete, .rename_record = lsqlite3_rename, .start_transaction = lsqlite3_start_trans, - .end_transaction = lsqlite3_end_trans + .end_transaction = lsqlite3_end_trans, + .del_transaction = lsqlite3_del_trans }; /* diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.c b/source4/lib/ldb/ldb_tdb/ldb_tdb.c index d8a03c3f55..701ed602ce 100644 --- a/source4/lib/ldb/ldb_tdb/ldb_tdb.c +++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.c @@ -193,7 +193,7 @@ static int ltdb_add(struct ldb_module *module, const struct ldb_message *msg) int ret; ret = ltdb_check_special_dn(module, msg); - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { return ret; } @@ -203,7 +203,7 @@ static int ltdb_add(struct ldb_module *module, const struct ldb_message *msg) ret = ltdb_store(module, msg, TDB_INSERT); - if (ret == LDB_ERR_SUCCESS) { + if (ret == LDB_SUCCESS) { ltdb_modified(module, msg->dn); } @@ -261,13 +261,13 @@ static int ltdb_delete(struct ldb_module *module, const struct ldb_dn *dn) } ret = ltdb_delete_noindex(module, dn); - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { goto failed; } /* remove any indexed attributes */ ret = ltdb_index_del(module, msg); - if (ret == LDB_ERR_SUCCESS) { + if (ret == LDB_SUCCESS) { ltdb_modified(module, dn); } else ret = LDB_ERR_OTHER; @@ -605,7 +605,7 @@ static int ltdb_modify(struct ldb_module *module, const struct ldb_message *msg) ret = ltdb_modify_internal(module, msg); - if (ret == LDB_ERR_SUCCESS) { + if (ret == LDB_SUCCESS) { ltdb_modified(module, msg->dn); } @@ -646,13 +646,13 @@ static int ltdb_rename(struct ldb_module *module, const struct ldb_dn *olddn, co } ret = ltdb_add(module, msg); - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { goto failed; } ret = ltdb_delete(module, olddn); error_str = talloc_strdup(module, ldb_errstring(module->ldb)); - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { ltdb_delete(module, newdn); } @@ -675,24 +675,29 @@ static int ltdb_start_trans(struct ldb_module *module) return LDB_ERR_OPERATIONS_ERROR; } - return LDB_ERR_SUCCESS; + return LDB_SUCCESS; } -static int ltdb_end_trans(struct ldb_module *module, int status) +static int ltdb_end_trans(struct ldb_module *module) { struct ltdb_private *ltdb = module->private_data; - if (status != LDB_ERR_SUCCESS) { - if (tdb_transaction_cancel(ltdb->tdb) != 0) { - return LDB_ERR_OPERATIONS_ERROR; - } - } else { - if (tdb_transaction_commit(ltdb->tdb) != 0) { - return LDB_ERR_OPERATIONS_ERROR; - } + if (tdb_transaction_commit(ltdb->tdb) != 0) { + return LDB_ERR_OPERATIONS_ERROR; + } + + return LDB_SUCCESS; +} + +static int ltdb_del_trans(struct ldb_module *module) +{ + struct ltdb_private *ltdb = module->private_data; + + if (tdb_transaction_cancel(ltdb->tdb) != 0) { + return LDB_ERR_OPERATIONS_ERROR; } - return status; + return LDB_SUCCESS; } static const struct ldb_module_ops ltdb_ops = { @@ -704,7 +709,8 @@ static const struct ldb_module_ops ltdb_ops = { .delete_record = ltdb_delete, .rename_record = ltdb_rename, .start_transaction = ltdb_start_trans, - .end_transaction = ltdb_end_trans + .end_transaction = ltdb_end_trans, + .del_transaction = ltdb_del_trans }; diff --git a/source4/lib/ldb/modules/ldb_map.c b/source4/lib/ldb/modules/ldb_map.c index 69e021b4ee..1133991ac4 100644 --- a/source4/lib/ldb/modules/ldb_map.c +++ b/source4/lib/ldb/modules/ldb_map.c @@ -1258,9 +1258,14 @@ static int map_start_trans(struct ldb_module *module) return ldb_next_start_trans(module); } -static int map_end_trans(struct ldb_module *module, int status) +static int map_end_trans(struct ldb_module *module) { - return ldb_next_end_trans(module, status); + return ldb_next_end_trans(module); +} + +static int map_del_trans(struct ldb_module *module) +{ + return ldb_next_del_trans(module); } static const struct ldb_module_ops map_ops = { @@ -1272,7 +1277,8 @@ static const struct ldb_module_ops map_ops = { .delete_record = map_delete, .rename_record = map_rename, .start_transaction = map_start_trans, - .end_transaction = map_end_trans + .end_transaction = map_end_trans, + .del_transaction = map_del_trans }; static char *map_find_url(struct ldb_context *ldb, const char *name) diff --git a/source4/lib/ldb/modules/rdn_name.c b/source4/lib/ldb/modules/rdn_name.c index c1a0c0852a..3e3fbd544f 100644 --- a/source4/lib/ldb/modules/rdn_name.c +++ b/source4/lib/ldb/modules/rdn_name.c @@ -220,10 +220,16 @@ static int rdn_start_trans(struct ldb_module *module) return ldb_next_start_trans(module); } -static int rdn_end_trans(struct ldb_module *module, int status) +static int rdn_end_trans(struct ldb_module *module) { ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_end_trans\n"); - return ldb_next_end_trans(module, status); + return ldb_next_end_trans(module); +} + +static int rdn_del_trans(struct ldb_module *module) +{ + ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_del_trans\n"); + return ldb_next_del_trans(module); } static int rdn_name_destructor(void *module_ctx) @@ -242,7 +248,8 @@ static const struct ldb_module_ops rdn_name_ops = { .delete_record = rdn_name_delete_record, .rename_record = rdn_name_rename_record, .start_transaction = rdn_start_trans, - .end_transaction = rdn_end_trans + .end_transaction = rdn_end_trans, + .del_transaction = rdn_del_trans }; diff --git a/source4/lib/ldb/modules/schema.c b/source4/lib/ldb/modules/schema.c index 1a2c2b8f97..e882f72bd4 100644 --- a/source4/lib/ldb/modules/schema.c +++ b/source4/lib/ldb/modules/schema.c @@ -520,8 +520,12 @@ static int schema_start_trans(struct ldb_module *module) { return ldb_next_start_trans(module); } -static int schema_end_trans(struct ldb_module *module, int status) { - return ldb_next_end_trans(module, status); +static int schema_end_trans(struct ldb_module *module) { + return ldb_next_end_trans(module); +} + +static int schema_del_trans(struct ldb_module *module) { + return ldb_next_del_trans(module); } static int schema_destructor(void *module_ctx) @@ -540,7 +544,8 @@ static const struct ldb_module_ops schema_ops = { .delete_record = schema_delete_record, .rename_record = schema_rename_record, .start_transaction = schema_start_trans, - .end_transaction = schema_end_trans + .end_transaction = schema_end_trans, + .del_transaction = schema_del_trans }; #ifdef HAVE_DLOPEN_DISABLED diff --git a/source4/lib/ldb/modules/skel.c b/source4/lib/ldb/modules/skel.c index 701128cd27..5d14a27a7b 100644 --- a/source4/lib/ldb/modules/skel.c +++ b/source4/lib/ldb/modules/skel.c @@ -80,9 +80,15 @@ static int skel_start_trans(struct ldb_module *module) } /* end a transaction */ -static int skel_end_trans(struct ldb_module *module, int status) +static int skel_end_trans(struct ldb_module *module) { - return ldb_next_end_trans(module, status); + return ldb_next_end_trans(module); +} + +/* delete a transaction */ +static int skel_del_trans(struct ldb_module *module) +{ + return ldb_next_del_trans(module); } static int skel_destructor(void *module_ctx) @@ -104,6 +110,7 @@ static const struct ldb_module_ops skel_ops = { .rename_record = skel_rename_record, .start_transaction = skel_start_trans, .end_transaction = skel_end_trans, + .del_transaction = skel_del_trans, }; #ifdef HAVE_DLOPEN_DISABLED diff --git a/source4/lib/ldb/modules/timestamps.c b/source4/lib/ldb/modules/timestamps.c index dc91937f85..01e5c2c37c 100644 --- a/source4/lib/ldb/modules/timestamps.c +++ b/source4/lib/ldb/modules/timestamps.c @@ -217,10 +217,16 @@ static int timestamps_start_trans(struct ldb_module *module) return ldb_next_start_trans(module); } -static int timestamps_end_trans(struct ldb_module *module, int status) +static int timestamps_end_trans(struct ldb_module *module) { ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_end_trans\n"); - return ldb_next_end_trans(module, status); + return ldb_next_end_trans(module); +} + +static int timestamps_del_trans(struct ldb_module *module) +{ + ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_del_trans\n"); + return ldb_next_del_trans(module); } static int timestamps_destructor(void *module_ctx) @@ -239,7 +245,8 @@ static const struct ldb_module_ops timestamps_ops = { .delete_record = timestamps_delete_record, .rename_record = timestamps_rename_record, .start_transaction = timestamps_start_trans, - .end_transaction = timestamps_end_trans + .end_transaction = timestamps_end_trans, + .del_transaction = timestamps_del_trans }; diff --git a/source4/lib/ldb/tools/ldbadd.c b/source4/lib/ldb/tools/ldbadd.c index ba58f782f0..058f4dc751 100644 --- a/source4/lib/ldb/tools/ldbadd.c +++ b/source4/lib/ldb/tools/ldbadd.c @@ -75,7 +75,7 @@ static int process_file(struct ldb_context *ldb, FILE *f) ldif->msg = ldb_msg_canonicalize(ldb, ldif->msg); ret = ldb_add(ldb, ldif->msg); - if (ret != LDB_ERR_SUCCESS) { + if (ret != LDB_SUCCESS) { fprintf(stderr, "ERR: \"%s\" on DN %s\n", ldb_errstring(ldb), ldb_dn_linearize(ldb, ldif->msg->dn)); failures++; -- cgit