1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-07 17:18:11 +03:00

Wrap DRS changes in a transaction

We should always apply a whole set of DRS changes or none of them. See
[MS-DRSR] 3.3.2
This commit is contained in:
Andrew Tridgell 2009-09-02 11:17:43 +10:00
parent 132242fe7e
commit a19ad21033

View File

@ -245,15 +245,33 @@ WERROR dsdb_extended_replicated_objects_commit(struct ldb_context *ldb,
/* TODO: handle linked attributes */
/* wrap the extended operation in a transaction
See [MS-DRSR] 3.3.2 Transactions
*/
ret = ldb_transaction_start(ldb);
if (ret != LDB_SUCCESS) {
DEBUG(0,(__location__ " Failed to start transaction\n"));
talloc_free(out);
return WERR_FOOBAR;
}
ret = ldb_extended(ldb, DSDB_EXTENDED_REPLICATED_OBJECTS_OID, out, &ext_res);
if (ret != LDB_SUCCESS) {
DEBUG(0,("Failed to apply records: %s: %s\n",
ldb_errstring(ldb), ldb_strerror(ret)));
talloc_free(out);
ldb_transaction_cancel(ldb);
return WERR_FOOBAR;
}
talloc_free(ext_res);
ret = ldb_transaction_commit(ldb);
if (ret != LDB_SUCCESS) {
DEBUG(0,(__location__ " Failed to commit transaction\n"));
talloc_free(out);
return WERR_FOOBAR;
}
if (_out) {
*_out = out;
} else {