diff options
author | Andrew Bartlett <abartlet@samba.org> | 2006-09-21 06:44:12 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:19:11 -0500 |
commit | 77db3973c417cc934485dbd6bf1a8a1c84c1b30b (patch) | |
tree | 7c104933cbfc7b011f80a45394a2c9bd4a611399 /source4/lib/ldb/modules | |
parent | f12584ccae9bdb4d3f31a719d90b881729321fab (diff) | |
download | samba-77db3973c417cc934485dbd6bf1a8a1c84c1b30b.tar.gz samba-77db3973c417cc934485dbd6bf1a8a1c84c1b30b.tar.bz2 samba-77db3973c417cc934485dbd6bf1a8a1c84c1b30b.zip |
r18781: Move the usnCreated and usnChanged handling around again.
This moves these attributes from objectguid into an optional backend
(objectguid), used by ltdb. For OpenLDAP, the entryUUID module
converts entryCSN into usnChanged.
This also changes the sequence number API, and uses 'time based'
sequence numbers, when an LDAP or similar backend is detected.
To assist this, we also store the last modified time in the TDB,
whenever we change a value.
Andrew Bartlett
(This used to be commit 72858f859483c0c532dddb2c146d6bd7b9be5072)
Diffstat (limited to 'source4/lib/ldb/modules')
-rw-r--r-- | source4/lib/ldb/modules/operational.c | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/source4/lib/ldb/modules/operational.c b/source4/lib/ldb/modules/operational.c index 1e405355c4..c327a96f90 100644 --- a/source4/lib/ldb/modules/operational.c +++ b/source4/lib/ldb/modules/operational.c @@ -169,29 +169,6 @@ failed: return -1; } -/* - add a uint64_t element to a record -*/ -static int add_uint64_element(struct ldb_message *msg, const char *attr, uint64_t v) -{ - struct ldb_message_element *el; - - if (ldb_msg_find_element(msg, attr) != NULL) { - return 0; - } - - if (ldb_msg_add_fmt(msg, attr, "%llu", (unsigned long long)v) != 0) { - return -1; - } - - el = ldb_msg_find_element(msg, attr); - /* always set as replace. This works because on add ops, the flag - is ignored */ - el->flags = LDB_FLAG_MOD_REPLACE; - - return 0; -} - /* hook search operations @@ -312,108 +289,6 @@ static int operational_search(struct ldb_module *module, struct ldb_request *req return ret; } -/* - hook add record ops -*/ -static int operational_add(struct ldb_module *module, struct ldb_request *req) -{ - struct ldb_request *down_req; - struct ldb_message *msg; - uint64_t seq_num; - int ret; - - if (ldb_dn_is_special(req->op.add.message->dn)) { - return ldb_next_request(module, req); - } - - down_req = talloc(req, struct ldb_request); - if (down_req == NULL) { - return LDB_ERR_OPERATIONS_ERROR; - } - - *down_req = *req; - - /* we have to copy the message as the caller might have it as a const */ - down_req->op.mod.message = msg = ldb_msg_copy_shallow(down_req, req->op.mod.message); - if (msg == NULL) { - return LDB_ERR_OPERATIONS_ERROR; - } - - /* Get a sequence number from the backend */ - ret = ldb_sequence_number(module->ldb, &seq_num); - if (ret == LDB_SUCCESS) { - if (add_uint64_element(msg, "uSNCreated", seq_num) != 0 || - add_uint64_element(msg, "uSNChanged", seq_num) != 0) { - talloc_free(down_req); - return LDB_ERR_OPERATIONS_ERROR; - } - } - - ldb_set_timeout_from_prev_req(module->ldb, req, down_req); - - /* go on with the call chain */ - ret = ldb_next_request(module, down_req); - - /* do not free down_req as the call results may be linked to it, - * it will be freed when the upper level request get freed */ - if (ret == LDB_SUCCESS) { - req->handle = down_req->handle; - } - - return ret; -} - -/* - hook modify record ops -*/ -static int operational_modify(struct ldb_module *module, struct ldb_request *req) -{ - struct ldb_request *down_req; - struct ldb_message *msg; - uint64_t seq_num; - int ret; - - if (ldb_dn_is_special(req->op.mod.message->dn)) { - return ldb_next_request(module, req); - } - - down_req = talloc(req, struct ldb_request); - if (down_req == NULL) { - return LDB_ERR_OPERATIONS_ERROR; - } - - *down_req = *req; - - /* we have to copy the message as the caller might have it as a const */ - down_req->op.mod.message = msg = ldb_msg_copy_shallow(down_req, req->op.mod.message); - if (msg == NULL) { - return LDB_ERR_OPERATIONS_ERROR; - } - /* Get a sequence number from the backend */ - ret = ldb_sequence_number(module->ldb, &seq_num); - if (ret == LDB_SUCCESS) { - /* update the records USN if possible */ - if (add_uint64_element(msg, "uSNChanged", - seq_num) != 0) { - talloc_free(down_req); - return -1; - } - } - - ldb_set_timeout_from_prev_req(module->ldb, req, down_req); - - /* go on with the call chain */ - ret = ldb_next_request(module, down_req); - - /* do not free down_req as the call results may be linked to it, - * it will be freed when the upper level request get freed */ - if (ret == LDB_SUCCESS) { - req->handle = down_req->handle; - } - - return ret; -} - static int operational_init(struct ldb_module *ctx) { /* setup some standard attribute handlers */ @@ -428,8 +303,6 @@ static int operational_init(struct ldb_module *ctx) static const struct ldb_module_ops operational_ops = { .name = "operational", .search = operational_search, - .add = operational_add, - .modify = operational_modify, .init_context = operational_init }; |