1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-14 20:23:54 +03:00

Add dbwrap_trans_store and dbwrap_trans_delete

This commit is contained in:
Volker Lendecke
2008-03-10 13:27:27 +01:00
parent 0a55e018dd
commit e66e502bee

View File

@@ -116,3 +116,82 @@ int32 dbwrap_change_int32_atomic(struct db_context *db, const char *keystr,
return 0;
}
int dbwrap_trans_store(struct db_context *db, TDB_DATA key, TDB_DATA dbuf,
int flag)
{
int res;
struct db_record *rec;
NTSTATUS status;
res = db->transaction_start(db);
if (res != 0) {
DEBUG(5, ("transaction_start failed\n"));
}
rec = db->fetch_locked(db, talloc_tos(), key);
if (rec == NULL) {
DEBUG(5, ("fetch_locked failed\n"));
goto cancel;
}
status = rec->store(rec, dbuf, flag);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(5, ("store returned %s\n", nt_errstr(status)));
goto cancel;
}
TALLOC_FREE(rec);
res = db->transaction_commit(db);
if (res != 0) {
DEBUG(5, ("tdb_transaction_commit failed\n"));
}
return res;
cancel:
if (db->transaction_cancel(db) != 0) {
smb_panic("Cancelling transaction failed");
}
return -1;
}
int dbwrap_trans_delete(struct db_context *db, TDB_DATA key)
{
int res;
struct db_record *rec;
NTSTATUS status;
res = db->transaction_start(db);
if (res != 0) {
DEBUG(5, ("transaction_start failed\n"));
}
rec = db->fetch_locked(db, talloc_tos(), key);
if (rec == NULL) {
DEBUG(5, ("fetch_locked failed\n"));
goto cancel;
}
status = rec->delete_rec(rec);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(5, ("delete_rec returned %s\n", nt_errstr(status)));
goto cancel;
}
TALLOC_FREE(rec);
res = db->transaction_commit(db);
if (res != 0) {
DEBUG(5, ("tdb_transaction_commit failed\n"));
}
return res;
cancel:
if (db->transaction_cancel(db) != 0) {
smb_panic("Cancelling transaction failed");
}
return -1;
}