Author: abartlet
Date: 2006-08-10 00:52:56 +0000 (Thu, 10 Aug 2006)
New Revision: 17473

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17473

Log:
Split loading a list of modules and initialising them into a seperate
function.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c      2006-08-09 
22:10:26 UTC (rev 17472)
+++ branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c      2006-08-10 
00:52:56 UTC (rev 17473)
@@ -236,11 +236,63 @@
 #endif
 }
 
+static int ldb_load_modules_list(struct ldb_context *ldb, const char 
**module_list, struct ldb_module *backend, struct ldb_module **out)
+{
+       struct ldb_module *module;
+       int i, ret;
+       
+       module = backend;
+
+       for (i = 0; module_list[i] != NULL; i++) {
+               struct ldb_module *current;
+               const struct ldb_module_ops *ops;
+               
+               ops = ldb_find_module_ops(module_list[i]);
+               if (ops == NULL) {
+                       if (ldb_try_load_dso(ldb, module_list[i]) == 0) {
+                               ops = ldb_find_module_ops(module_list[i]);
+                       }
+               }
+               
+               if (ops == NULL) {
+                       ldb_debug(ldb, LDB_DEBUG_WARNING, "WARNING: Module [%s] 
not found\n", 
+                                 module_list[i]);
+                       continue;
+               }
+               
+               current = talloc_zero(ldb, struct ldb_module);
+               if (current == NULL) {
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
+               
+               current->ldb = ldb;
+               current->ops = ops;
+               
+               DLIST_ADD(module, current);
+       }
+       *out = module;
+       return LDB_SUCCESS;
+}
+
+static int ldb_init_module_chain(struct ldb_context *ldb, struct ldb_module 
*module) 
+{
+       while (module && module->ops->init_context == NULL) 
+               module = module->next;
+
+       if (module && module->ops->init_context &&
+               module->ops->init_context(module) != LDB_SUCCESS) {
+               ldb_debug(ldb, LDB_DEBUG_FATAL, "module initialization 
failed\n");
+               return LDB_ERR_OPERATIONS_ERROR;
+       }
+
+       return LDB_SUCCESS;
+}
+
 int ldb_load_modules(struct ldb_context *ldb, const char *options[])
 {
        const char **modules = NULL;
-       struct ldb_module *module;
        int i;
+       int ret;
        TALLOC_CTX *mem_ctx = talloc_new(ldb);
        if (!mem_ctx) {
                return LDB_ERR_OPERATIONS_ERROR;
@@ -259,7 +311,6 @@
 
        /* if not overloaded by options and the backend is not ldap try to load 
the modules list from ldb */
        if ((modules == NULL) && (strcmp("ldap", ldb->modules->ops->name) != 
0)) { 
-               int ret;
                const char * const attrs[] = { "@LIST" , NULL};
                struct ldb_result *res = NULL;
                struct ldb_dn *mods_dn;
@@ -295,51 +346,16 @@
        }
 
        if (modules != NULL) {
-               for (i = 0; modules[i] != NULL; i++) {
-                       struct ldb_module *current;
-                       const struct ldb_module_ops *ops;
-                               
-                       ops = ldb_find_module_ops(modules[i]);
-                       if (ops == NULL) {
-                               if (ldb_try_load_dso(ldb, modules[i]) == 0) {
-                                       ops = ldb_find_module_ops(modules[i]);
-                               }
-                       }
-                       
-                       if (ops == NULL) {
-                               ldb_debug(ldb, LDB_DEBUG_WARNING, "WARNING: 
Module [%s] not found\n", 
-                                         modules[i]);
-                               continue;
-                       }
-
-                       current = talloc_zero(ldb, struct ldb_module);
-                       if (current == NULL) {
-                               return -1;
-                       }
-
-                       current->ldb = ldb;
-                       current->ops = ops;
-               
-                       DLIST_ADD(ldb->modules, current);
+               ret = ldb_load_modules_list(ldb, modules, ldb->modules, 
&ldb->modules);
+               talloc_free(modules);
+               if (ret != LDB_SUCCESS) {
+                       return ret;
                }
-
-               talloc_free(modules);
        } else {
                ldb_debug(ldb, LDB_DEBUG_TRACE, "No modules specified for this 
database\n");
        }
 
-       module = ldb->modules;
-
-       while (module && module->ops->init_context == NULL) 
-               module = module->next;
-
-       if (module && module->ops->init_context &&
-               module->ops->init_context(module) != LDB_SUCCESS) {
-               ldb_debug(ldb, LDB_DEBUG_FATAL, "module initialization 
failed\n");
-               return -1;
-       }
-
-       return 0; 
+       return ldb_init_module_chain(ldb, ldb->modules);
 }
 
 /*

Reply via email to