summaryrefslogtreecommitdiff
path: root/source3/lib/dbwrap/dbwrap.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2012-02-15 15:08:29 +0100
committerVolker Lendecke <vl@samba.org>2012-04-20 13:42:40 +0200
commit61c97506e8ccb878d06edae72f4216ad58b96a9b (patch)
tree385628abecd54ca285beac4441a567cadf5db9a9 /source3/lib/dbwrap/dbwrap.c
parent8e5b11bc143e8532aeed504e47b881ce53411ce3 (diff)
downloadsamba-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.c38
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 {