diff options
author | Volker Lendecke <vl@samba.org> | 2012-02-15 15:08:29 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2012-04-20 13:42:40 +0200 |
commit | 61c97506e8ccb878d06edae72f4216ad58b96a9b (patch) | |
tree | 385628abecd54ca285beac4441a567cadf5db9a9 /source3/lib/dbwrap/dbwrap.c | |
parent | 8e5b11bc143e8532aeed504e47b881ce53411ce3 (diff) | |
download | samba-61c97506e8ccb878d06edae72f4216ad58b96a9b.tar.gz samba-61c97506e8ccb878d06edae72f4216ad58b96a9b.tar.bz2 samba-61c97506e8ccb878d06edae72f4216ad58b96a9b.zip |
s3-dbwrap: Add dbwrap_set_stored_callback
This is a per-db function that is called whenever some record is modified
Diffstat (limited to 'source3/lib/dbwrap/dbwrap.c')
-rw-r--r-- | source3/lib/dbwrap/dbwrap.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/source3/lib/dbwrap/dbwrap.c b/source3/lib/dbwrap/dbwrap.c index 21d46ea895..14562bb6e4 100644 --- a/source3/lib/dbwrap/dbwrap.c +++ b/source3/lib/dbwrap/dbwrap.c @@ -67,12 +67,46 @@ TDB_DATA dbwrap_record_get_value(const struct db_record *rec) NTSTATUS dbwrap_record_store(struct db_record *rec, TDB_DATA data, int flags) { - return rec->store(rec, data, flags); + NTSTATUS status; + struct db_context *db; + + status = rec->store(rec, data, flags); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + db = rec->db; + if (db->stored_callback != NULL) { + db->stored_callback(db, rec, + db->stored_callback_private_data); + } + return NT_STATUS_OK; +} + +void dbwrap_set_stored_callback( + struct db_context *db, + void (*cb)(struct db_context *db, struct db_record *rec, + void *private_data), + void *private_data) +{ + db->stored_callback = cb; + db->stored_callback_private_data = private_data; } NTSTATUS dbwrap_record_delete(struct db_record *rec) { - return rec->delete_rec(rec); + NTSTATUS status; + struct db_context *db; + + status = rec->delete_rec(rec); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + db = rec->db; + if (db->stored_callback != NULL) { + db->stored_callback(db, rec, + db->stored_callback_private_data); + } + return NT_STATUS_OK; } struct dbwrap_lock_order_state { |