Author: mkhl Date: 2006-08-11 22:36:53 +0000 (Fri, 11 Aug 2006) New Revision: 17500
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17500 Log: Add function to check whether we are supposed to use a local partition at all. Skip requests targeted at the local db if we aren't supposed to use it. Martin Modified: branches/SOC/mkhl/ldb-map/modules/ldb_map.c Changeset: Modified: branches/SOC/mkhl/ldb-map/modules/ldb_map.c =================================================================== --- branches/SOC/mkhl/ldb-map/modules/ldb_map.c 2006-08-11 22:11:29 UTC (rev 17499) +++ branches/SOC/mkhl/ldb-map/modules/ldb_map.c 2006-08-11 22:36:53 UTC (rev 17500) @@ -228,6 +228,20 @@ /* Dealing with DNs for different partitions * ========================================= */ +/* Check whether any data should be stored in the local partition. */ +static +BOOL +map_check_local_db(struct ldb_module *module) +{ + const struct ldb_map_context *data = map_get_context(module); + + if (!data->remote_base_dn || !data->local_base_dn) { + return False; + } + + return True; +} + /* WARK: verbatim copy from ldb_dn.c */ static struct ldb_dn_component @@ -2334,6 +2348,11 @@ return LDB_ERR_OPERATIONS_ERROR; } + /* There is no local db, stop searching */ + if (!map_check_local_db(ac->module)) { + return map_up_callback(ldb, ac->orig_req, ares); + } + /* Prepare local search context */ sc = map_init_search_context(ac, ares); if (sc == NULL) { @@ -2598,8 +2617,8 @@ ac->local_req->op.add.message = local; ac->remote_req->op.add.message = remote; - if (local->num_elements == 0) { - /* No local data, just run the remote request */ + if ((local->num_elements == 0) || (!map_check_local_db(ac->module))) { + /* No local data or db, just run the remote request */ talloc_free(ac->local_req); req->handle = h; /* return our own handle to deal with this call */ return map_add_do_remote(h); @@ -2761,8 +2780,8 @@ ac->local_req->op.mod.message = local; ac->remote_req->op.mod.message = remote; - if (local->num_elements == 0) { - /* No local data, just run the remote request */ + if ((local->num_elements == 0) || (!map_check_local_db(ac->module))) { + /* No local data or db, just run the remote request */ talloc_free(ac->local_req); req->handle = h; /* return our own handle to deal with this call */ return map_modify_do_remote(h); @@ -2877,16 +2896,11 @@ *(ac->remote_req) = *req; /* copy the request */ ac->remote_req->op.del.dn = ldb_dn_map_local(module, ac->remote_req, req->op.del.dn); - /* The DN didn't change, so just pretend we were never here */ - /* TODO:: It's actually quite common for DNs not to change - * until the remote one is rebased, so we need a - * different way to test here. - if (ldb_dn_compare(module->ldb, ac->remote_req->op.del.dn, - req->op.del.dn) == 0) { - talloc_free(h); - return ldb_next_request(module, req); + /* No local db, just run the remote request */ + if (!map_check_local_db(ac->module)) { + req->handle = h; /* return our own handle to deal with this call */ + return map_delete_do_remote(h); } - */ ac->remote_req->context = NULL; ac->remote_req->callback = NULL; @@ -3032,6 +3046,12 @@ ac->remote_req->context = NULL; ac->remote_req->callback = NULL; + /* No local db, just run the remote request */ + if (!map_check_local_db(ac->module)) { + req->handle = h; /* return our own handle to deal with this call */ + return map_rename_do_remote(h); + } + /* Prepare the fixup operation */ /* TODO: use GUIDs here instead -- or skip it when GUIDs are used. */ ac->down_req = map_build_fixup_req(ac, req->op.rename.newdn, ac->remote_req->op.rename.newdn);
