r25962: Move to more modern ldb functions loading module list.
authorAndrew Bartlett <abartlet@samba.org>
Thu, 15 Nov 2007 04:54:51 +0000 (05:54 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:45:20 +0000 (05:45 +0100)
Andrew Bartlett
(This used to be commit c3bfcf44a49c6a19579c85fb3660331177a436fb)

source4/lib/ldb/common/ldb_modules.c

index 845628d3ac950e62570b29fcc5f945723aca01b6..d2e55c048eb743b47bb051b89ca801fa3284358c 100644 (file)
@@ -321,28 +321,29 @@ int ldb_load_modules(struct ldb_context *ldb, const char *options[])
                        return -1;
                }
 
-               ret = ldb_search(ldb, mods_dn, LDB_SCOPE_BASE, "", attrs, &res);
+               ret = ldb_search_exp_fmt(ldb, mods_dn, &res, mods_dn, LDB_SCOPE_BASE, attrs, "@LIST=*");
                
                if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                        ldb_debug(ldb, LDB_DEBUG_TRACE, "no modules required by the db");
                } else if (ret != LDB_SUCCESS) {
                        ldb_debug(ldb, LDB_DEBUG_FATAL, "ldb error (%s) occurred searching for modules, bailing out\n", ldb_errstring(ldb));
                        talloc_free(mem_ctx);
-                       return -1;
+                       return ret;
                } else {
-                       talloc_steal(mods_dn, res);
-                       if (res->count == 0 || res->msgs[0]->num_elements == 0) {
+                       const char *module_list;
+                       if (res->count == 0) {
                                ldb_debug(ldb, LDB_DEBUG_TRACE, "no modules required by the db");
+                       } else if (res->count > 1) {
+                               ldb_debug(ldb, LDB_DEBUG_FATAL, "Too many records found (%d), bailing out\n", res->count);
+                               talloc_free(mem_ctx);
+                               return -1;
                        } else {
-                               if (res->count > 1) {
-                                       ldb_debug(ldb, LDB_DEBUG_FATAL, "Too many records found (%d), bailing out\n", res->count);
-                                       talloc_free(mem_ctx);
-                                       return -1;
+                               module_list = ldb_msg_find_attr_as_string(res->msgs[0], "@LIST", NULL);
+                               if (!module_list) {
+                                       ldb_debug(ldb, LDB_DEBUG_TRACE, "no modules required by the db");
                                }
-                               
                                modules = ldb_modules_list_from_string(ldb, mem_ctx,
-                                                                      (const char *)res->msgs[0]->elements[0].values[0].data);
-                               
+                                                              module_list);
                        }
                }