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);

Reply via email to