r20849: first step to move away from using find_backend() and use find_partition()
authorStefan Metzmacher <metze@samba.org>
Wed, 17 Jan 2007 14:19:06 +0000 (14:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:43:39 +0000 (14:43 -0500)
instead

metze
(This used to be commit 0d75cca6f37975a3855973468dc55520cb3b3fb7)

source4/dsdb/samdb/ldb_modules/partition.c

index 8a497411df638c8744097bd52c55862e03b1f314..5ac954d65b3e073c3415840aaa75cc68cca4c1ca 100644 (file)
@@ -138,7 +138,6 @@ static struct ldb_module *find_backend(struct ldb_module *module, struct ldb_req
        return make_module_for_next_request(req, module->ldb, partition->module);
 };
 
-
 /*
   fire the caller's callback for every entry, but only send 'done' once.
 */
@@ -274,6 +273,7 @@ static int partition_send_all(struct ldb_module *module,
 static int partition_replicate(struct ldb_module *module, struct ldb_request *req, struct ldb_dn *dn) 
 {
        int i;
+       struct dsdb_control_current_partition *partition;
        struct ldb_module *backend;
        struct partition_private_data *data = talloc_get_type(module->private_data, 
                                                              struct partition_private_data);
@@ -293,11 +293,26 @@ static int partition_replicate(struct ldb_module *module, struct ldb_request *re
                }
        }
 
-       /* Otherwise, we need to find the backend to fire it to */
+       /* Otherwise, we need to find the partition to fire it to */
+
+       /* Find partition */
+       partition = find_partition(data, dn);
+       if (!partition) {
+               /*
+                * if we haven't found a matching partition
+                * pass the request to the main ldb
+                *
+                * TODO: we should maybe return an error here
+                *       if it's not a special dn
+                */
+               return ldb_next_request(module, req);
+       }
+
+       backend = make_module_for_next_request(req, module->ldb, partition->module);
+       if (!backend) {
+               return LDB_ERR_OPERATIONS_ERROR;
+       }
 
-       /* Find backend */
-       backend = find_backend(module, req, dn);
-       
        /* issue request */
        return ldb_next_request(backend, req);