[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha4-164-g861b79c

Stefan Metzmacher metze at samba.org
Mon Jun 30 08:01:55 GMT 2008


The branch, v4-0-test has been updated
       via  861b79c91fb39b6b7f40d57000770f0f839e6c59 (commit)
       via  3379630a91bd96a34f99ed24ac92380bd97ccb07 (commit)
       via  0aef6d394d7a93cce9aee17af1153b07ea1a9c07 (commit)
       via  b5187dd58ccae03e22ba8857c344a2d7d94f13b3 (commit)
       via  5bf414efbdf279fd1b85eb47e7b47656bc435f11 (commit)
       via  a2a506ba2e044699d147486e987b11d839373784 (commit)
       via  54b06a1c839a9af4565635011e3e624271769cc7 (commit)
       via  be3f3e18d476431f991d08317eb94b4aebe927e6 (commit)
       via  1d5b714438a955d76f92f4ccd8aa2f7f89ffa5fd (commit)
       via  a485a363c3dc1b6b4d12410ed8e390b4d64a739f (commit)
      from  ddb62bf6cc9371c11778ea6630ef0fbbe22cd4f9 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 861b79c91fb39b6b7f40d57000770f0f839e6c59
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 20:42:27 2008 +0200

    nbt_server/wins: don't force wins_ldb as shared_module
    
    metze

commit 3379630a91bd96a34f99ed24ac92380bd97ccb07
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jun 27 15:34:31 2008 +0200

    dsdb: don't force the build of ldb modules as shared_module
    
    metze

commit 0aef6d394d7a93cce9aee17af1153b07ea1a9c07
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 20:41:45 2008 +0200

    ldb_ildap: don't force the build as shared_module
    
    metze

commit b5187dd58ccae03e22ba8857c344a2d7d94f13b3
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 10:50:49 2008 +0200

    auth: don't force the build of auth_server as shared_module
    
    metze

commit 5bf414efbdf279fd1b85eb47e7b47656bc435f11
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 11:01:20 2008 +0200

    lib/talloc: build as MERGED_OBJ instead of STATIC_LIBRARY
    
    metze

commit a2a506ba2e044699d147486e987b11d839373784
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 10:59:02 2008 +0200

    lib/events: build as MERGED_OBJ instead of STATIC_LIBRARY
    
    metze

commit 54b06a1c839a9af4565635011e3e624271769cc7
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jun 27 15:33:36 2008 +0200

    smb_build: use MERGED_OBJ instead of STATIC_LIBRARY
    
    metze

commit be3f3e18d476431f991d08317eb94b4aebe927e6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jun 27 15:31:35 2008 +0200

    smb_build: enable implicit make rules
    
    metze

commit 1d5b714438a955d76f92f4ccd8aa2f7f89ffa5fd
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 10:49:49 2008 +0200

    ldb: allow ldb modules to specify LDB_MODULE(name) or LDB_BACKEND(name)
    
    metze

commit a485a363c3dc1b6b4d12410ed8e390b4d64a739f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jun 28 10:49:49 2008 +0200

    ldb: fix the init function names for some modules
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 source/auth/ntlm/config.mk              |    1 -
 source/build/smb_build/input.pm         |    1 +
 source/build/smb_build/main.pl          |    4 +-
 source/dsdb/samdb/ldb_modules/config.mk |   27 +----
 source/lib/events/config.mk             |    2 +-
 source/lib/ldb/common/ldb.c             |  147 ---------------------
 source/lib/ldb/common/ldb_modules.c     |  214 ++++++++++++++++++++++++++++---
 source/lib/ldb/config.mk                |    3 +-
 source/lib/ldb/ldb_ildap/config.mk      |    2 +-
 source/lib/talloc/config.mk             |    2 +-
 source/nbt_server/config.mk             |    1 -
 11 files changed, 208 insertions(+), 196 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/auth/ntlm/config.mk b/source/auth/ntlm/config.mk
index f31c2b7..4792a26 100644
--- a/source/auth/ntlm/config.mk
+++ b/source/auth/ntlm/config.mk
@@ -34,7 +34,6 @@ auth_anonymous_OBJ_FILES = $(addprefix $(authsrcdir)/ntlm/, auth_anonymous.o)
 INIT_FUNCTION = auth_server_init
 SUBSYSTEM = auth
 PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL LIBCLI_SMB
-OUTPUT_TYPE = SHARED_LIBRARY
 # End MODULE auth_server
 #######################
 
diff --git a/source/build/smb_build/input.pm b/source/build/smb_build/input.pm
index 53a051a..1696a36 100644
--- a/source/build/smb_build/input.pm
+++ b/source/build/smb_build/input.pm
@@ -175,6 +175,7 @@ sub add_implicit($$)
 	$INPUT->{$n}->{LDFLAGS} = ["\$(".uc($n)."_LDFLAGS)"];
 	$INPUT->{$n}->{CFLAGS} = ["\$(".uc($n)."_CFLAGS)"];
 	$INPUT->{$n}->{CPPFLAGS} = ["\$(".uc($n)."_CPPFLAGS)"];
+	$INPUT->{$n}->{ENABLE} = "YES";
 }
 
 sub calc_unique_deps($$$$$$$$)
diff --git a/source/build/smb_build/main.pl b/source/build/smb_build/main.pl
index 88289af..f8a0cb0 100644
--- a/source/build/smb_build/main.pl
+++ b/source/build/smb_build/main.pl
@@ -32,9 +32,9 @@ my $subsys_output_type = ["MERGED_OBJ"];
 
 my $library_output_type;
 if ($config::config{USESHARED} eq "true") {
-	$library_output_type = ["SHARED_LIBRARY", "STATIC_LIBRARY"];
+	$library_output_type = ["SHARED_LIBRARY", "MERGED_OBJ"];
 } else {
-	$library_output_type = ["STATIC_LIBRARY"];
+	$library_output_type = ["MERGED_OBJ"];
 	push (@$library_output_type, "SHARED_LIBRARY") if 
 						($config::config{BLDSHARED} eq "true")
 }
diff --git a/source/dsdb/samdb/ldb_modules/config.mk b/source/dsdb/samdb/ldb_modules/config.mk
index d8dc051..830f7c9 100644
--- a/source/dsdb/samdb/ldb_modules/config.mk
+++ b/source/dsdb/samdb/ldb_modules/config.mk
@@ -2,7 +2,6 @@
 # Start MODULE ldb_objectguid
 [MODULE::ldb_objectguid]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBNDR NDR_MISC
 INIT_FUNCTION = LDB_MODULE(objectguid)
 # End MODULE ldb_objectguid
@@ -14,7 +13,6 @@ ldb_objectguid_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/objectguid.o
 # Start MODULE ldb_repl_meta_data
 [MODULE::ldb_repl_meta_data]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBEVENTS \
 			LIBNDR NDR_MISC NDR_DRSUAPI \
 			NDR_DRSBLOBS LIBNDR
@@ -29,7 +27,6 @@ ldb_repl_meta_data_OBJ_FILES = \
 # Start MODULE ldb_dsdb_cache
 [MODULE::ldb_dsdb_cache]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBEVENTS
 INIT_FUNCTION = LDB_MODULE(dsdb_cache)
 # End MODULE ldb_dsdb_cache
@@ -42,7 +39,6 @@ ldb_dsdb_cache_OBJ_FILES = \
 # Start MODULE ldb_schema_fsmo
 [MODULE::ldb_schema_fsmo]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBEVENTS
 INIT_FUNCTION = LDB_MODULE(schema_fsmo)
 # End MODULE ldb_schema_fsmo
@@ -55,7 +51,6 @@ ldb_schema_fsmo_OBJ_FILES = \
 # Start MODULE ldb_naming_fsmo
 [MODULE::ldb_naming_fsmo]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBEVENTS
 INIT_FUNCTION = LDB_MODULE(naming_fsmo)
 # End MODULE ldb_naming_fsmo
@@ -68,7 +63,6 @@ ldb_naming_fsmo_OBJ_FILES = \
 # Start MODULE ldb_pdc_fsmo
 [MODULE::ldb_pdc_fsmo]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = SAMDB LIBTALLOC LIBEVENTS
 INIT_FUNCTION = LDB_MODULE(pdc_fsmo)
 # End MODULE ldb_pdc_fsmo
@@ -81,7 +75,6 @@ ldb_pdc_fsmo_OBJ_FILES = \
 # Start MODULE ldb_samldb
 [MODULE::ldb_samldb]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LDAP_ENCODE NDR_MISC SAMDB
 INIT_FUNCTION = LDB_MODULE(samldb)
 #
@@ -95,7 +88,6 @@ ldb_samldb_OBJ_FILES = \
 # Start MODULE ldb_samba3sam
 [MODULE::ldb_samba3sam]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 INIT_FUNCTION = LDB_MODULE(samba3sam)
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS SMBPASSWD \
 			NSS_WRAPPER LIBSECURITY NDR_SECURITY
@@ -109,8 +101,7 @@ ldb_samba3sam_OBJ_FILES = \
 # Start MODULE ldb_simple_ldap_map
 [MODULE::ldb_simple_ldap_map]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
-INIT_FUNCTION = LDB_MODULE(simple_ldap_map)
+INIT_FUNCTION = LDB_MODULE(entryuuid),LDB_MODULE(nsuniqueid)
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBNDR NDR_MISC
 ENABLE = YES
 ALIASES = entryuuid nsuniqueid
@@ -137,7 +128,6 @@ ldb_simple_ldap_map_OBJ_FILES = \
 [MODULE::ldb_rootdse]
 SUBSYSTEM = LIBLDB
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS SAMDB
-OUTPUT_TYPE = SHARED_LIBRARY
 INIT_FUNCTION = LDB_MODULE(rootdse)
 # End MODULE ldb_rootdse
 ################################################
@@ -148,7 +138,6 @@ ldb_rootdse_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/rootdse.o
 # Start MODULE ldb_password_hash
 [MODULE::ldb_password_hash]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 INIT_FUNCTION = LDB_MODULE(password_hash)
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS SAMDB LDAP_ENCODE \
 			LIBCLI_AUTH NDR_DRSBLOBS KERBEROS \
@@ -162,7 +151,6 @@ ldb_password_hash_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/password_hash.o
 # Start MODULE ldb_local_password
 [MODULE::ldb_local_password]
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBNDR SAMDB
-OUTPUT_TYPE = SHARED_LIBRARY
 SUBSYSTEM = LIBLDB
 INIT_FUNCTION = LDB_MODULE(local_password)
 # End MODULE ldb_local_password
@@ -174,7 +162,6 @@ ldb_local_password_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/local_password.o
 # Start MODULE ldb_kludge_acl
 [MODULE::ldb_kludge_acl]
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBSECURITY SAMDB
-OUTPUT_TYPE = SHARED_LIBRARY
 SUBSYSTEM = LIBLDB
 INIT_FUNCTION = LDB_MODULE(kludge_acl)
 
@@ -187,7 +174,6 @@ ldb_kludge_acl_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/kludge_acl.o
 # Start MODULE ldb_extended_dn
 [MODULE::ldb_extended_dn]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBNDR LIBSECURITY SAMDB
 INIT_FUNCTION = LDB_MODULE(extended_dn)
 # End MODULE ldb_extended_dn
@@ -199,7 +185,6 @@ ldb_extended_dn_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/extended_dn.o
 # Start MODULE ldb_show_deleted
 [MODULE::ldb_show_deleted]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS
 INIT_FUNCTION = LDB_MODULE(show_deleted)
 # End MODULE ldb_show_deleted
@@ -211,7 +196,6 @@ ldb_show_deleted_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/show_deleted.o
 # Start MODULE ldb_partition
 [MODULE::ldb_partition]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS SAMDB
 INIT_FUNCTION = LDB_MODULE(partition)
 # End MODULE ldb_partition
@@ -223,7 +207,6 @@ ldb_partition_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/partition.o
 # Start MODULE ldb_schema
 [MODULE::ldb_schema]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBLDB
 INIT_FUNCTION = LDB_MODULE(schema)
 # End MODULE ldb_schema
@@ -235,10 +218,9 @@ ldb_schema_OBJ_FILES = $(addprefix $(dsdbsrcdir)/samdb/ldb_modules/, schema.o sc
 # Start MODULE ldb_update_kt
 [MODULE::ldb_update_keytab]
 SUBSYSTEM = LIBLDB
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS CREDENTIALS
 #Also depends on credentials, but that would loop
-INIT_FUNCTION = LDB_MODULE(update_kt)
+INIT_FUNCTION = LDB_MODULE(update_keytab)
 # End MODULE ldb_update_kt
 ################################################
 
@@ -248,7 +230,6 @@ ldb_update_keytab_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/update_keytab.o
 # Start MODULE ldb_objectclass
 [MODULE::ldb_objectclass]
 INIT_FUNCTION = LDB_MODULE(objectclass)
-OUTPUT_TYPE = SHARED_LIBRARY
 CFLAGS = -Ilib/ldb/include
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBSECURITY NDR_SECURITY SAMDB
 SUBSYSTEM = LIBLDB
@@ -286,7 +267,6 @@ ldb_subtree_delete_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/subtree_delete.o
 [MODULE::ldb_linked_attributes]
 INIT_FUNCTION = LDB_MODULE(linked_attributes)
 CFLAGS = -Ilib/ldb/include
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS SAMDB
 SUBSYSTEM = LIBLDB
 # End MODULE ldb_linked_attributes
@@ -311,7 +291,6 @@ ldb_ranged_results_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/ranged_results.o
 [MODULE::ldb_anr]
 INIT_FUNCTION = LDB_MODULE(anr)
 CFLAGS = -Ilib/ldb/include
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBSAMBA-UTIL SAMDB
 SUBSYSTEM = LIBLDB
 # End MODULE ldb_anr
@@ -324,7 +303,6 @@ ldb_anr_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/anr.o
 [MODULE::ldb_normalise]
 INIT_FUNCTION = LDB_MODULE(normalise)
 CFLAGS = -Ilib/ldb/include
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBSAMBA-UTIL SAMDB
 SUBSYSTEM = LIBLDB
 # End MODULE ldb_normalise
@@ -337,7 +315,6 @@ ldb_normalise_OBJ_FILES = $(dsdbsrcdir)/samdb/ldb_modules/normalise.o
 [MODULE::ldb_instancetype]
 INIT_FUNCTION = LDB_MODULE(instancetype)
 CFLAGS = -Ilib/ldb/include
-OUTPUT_TYPE = SHARED_LIBRARY
 PRIVATE_DEPENDENCIES = LIBTALLOC LIBEVENTS LIBSAMBA-UTIL SAMDB
 SUBSYSTEM = LIBLDB
 # End MODULE ldb_instancetype
diff --git a/source/lib/events/config.mk b/source/lib/events/config.mk
index db70830..127d964 100644
--- a/source/lib/events/config.mk
+++ b/source/lib/events/config.mk
@@ -35,7 +35,7 @@ EVENTS_STANDARD_OBJ_FILES = $(libeventssrcdir)/events_standard.o
 # Start SUBSYSTEM LIBEVENTS
 [LIBRARY::LIBEVENTS]
 PUBLIC_DEPENDENCIES = LIBTALLOC
-OUTPUT_TYPE = STATIC_LIBRARY
+OUTPUT_TYPE = MERGED_OBJ
 CFLAGS = -Ilib/events
 #
 # End SUBSYSTEM LIBEVENTS
diff --git a/source/lib/ldb/common/ldb.c b/source/lib/ldb/common/ldb.c
index cac0a38..ce4796d 100644
--- a/source/lib/ldb/common/ldb.c
+++ b/source/lib/ldb/common/ldb.c
@@ -68,153 +68,6 @@ struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx, struct event_context *ev_ctx)
 	return ldb;
 }
 
-static struct backends_list_entry {
-	struct ldb_backend_ops *ops;
-	struct backends_list_entry *prev, *next;
-} *ldb_backends = NULL;
-
-#ifndef STATIC_LIBLDB_BACKENDS
-
-#ifdef HAVE_LDB_LDAP
-#define LDAP_INIT &ldb_ldap_backend_ops, \
-				  &ldb_ldapi_backend_ops, \
-				  &ldb_ldaps_backend_ops,
-#else
-#define LDAP_INIT
-#endif
-
-#ifdef HAVE_LDB_SQLITE3
-#define SQLITE3_INIT &ldb_sqlite3_backend_ops,
-#else
-#define SQLITE3_INIT
-#endif
-
-#define STATIC_LIBLDB_BACKENDS \
-	LDAP_INIT \
-	SQLITE3_INIT \
-	&ldb_tdb_backend_ops, 	\
-	NULL
-#endif
-
-const static struct ldb_backend_ops *builtin_backends[] = {
-	STATIC_LIBLDB_BACKENDS
-};
-
-static ldb_connect_fn ldb_find_backend(const char *url)
-{
-	struct backends_list_entry *backend;
-	int i;
-
-	for (i = 0; builtin_backends[i]; i++) {
-		if (strncmp(builtin_backends[i]->name, url,
-			    strlen(builtin_backends[i]->name)) == 0)
-			return builtin_backends[i]->connect_fn;
-	}
-
-	for (backend = ldb_backends; backend; backend = backend->next) {
-		if (strncmp(backend->ops->name, url,
-			    strlen(backend->ops->name)) == 0) {
-			return backend->ops->connect_fn;
-		}
-	}
-
-	return NULL;
-}
-
-/*
- register a new ldb backend
-*/
-int ldb_register_backend(const char *url_prefix, ldb_connect_fn connectfn)
-{
-	struct ldb_backend_ops *backend;
-	struct backends_list_entry *entry;
-
-	backend = talloc(talloc_autofree_context(), struct ldb_backend_ops);
-	if (!backend) return LDB_ERR_OPERATIONS_ERROR;
-
-	entry = talloc(talloc_autofree_context(), struct backends_list_entry);
-	if (!entry) {
-		talloc_free(backend);
-		return LDB_ERR_OPERATIONS_ERROR;
-	}
-
-	if (ldb_find_backend(url_prefix)) {
-		return LDB_SUCCESS;
-	}
-
-	/* Maybe check for duplicity here later on? */
-
-	backend->name = talloc_strdup(backend, url_prefix);
-	backend->connect_fn = connectfn;
-	entry->ops = backend;
-	DLIST_ADD(ldb_backends, entry);
-
-	return LDB_SUCCESS;
-}
-
-/*
-   Return the ldb module form of a database.
-   The URL can either be one of the following forms
-   ldb://path
-   ldapi://path
-
-   flags is made up of LDB_FLG_*
-
-   the options are passed uninterpreted to the backend, and are
-   backend specific.
-
-   This allows modules to get at only the backend module, for example where a
-   module may wish to direct certain requests at a particular backend.
-*/
-int ldb_connect_backend(struct ldb_context *ldb,
-			const char *url,
-			const char *options[],
-			struct ldb_module **backend_module)
-{
-	int ret;
-	char *backend;
-	ldb_connect_fn fn;
-
-	if (strchr(url, ':') != NULL) {
-		backend = talloc_strndup(ldb, url, strchr(url, ':')-url);
-	} else {
-		/* Default to tdb */
-		backend = talloc_strdup(ldb, "tdb");
-	}
-
-	fn = ldb_find_backend(backend);
-
-	if (fn == NULL) {
-		struct ldb_backend_ops *ops;
-		char *symbol_name = talloc_asprintf(ldb, "ldb_%s_backend_ops", backend);
-		if (symbol_name == NULL) {
-			return LDB_ERR_OPERATIONS_ERROR;
-		}
-		ops = ldb_dso_load_symbol(ldb, backend, symbol_name);
-		if (ops != NULL) {
-			fn = ops->connect_fn;
-		}
-		talloc_free(symbol_name);
-	}
-
-	talloc_free(backend);
-
-	if (fn == NULL) {
-		ldb_debug(ldb, LDB_DEBUG_FATAL,
-			  "Unable to find backend for '%s'\n", url);
-		return LDB_ERR_OTHER;
-	}
-
-	ret = fn(ldb, url, ldb->flags, options, backend_module);
-
-	if (ret != LDB_SUCCESS) {
-		ldb_debug(ldb, LDB_DEBUG_ERROR,
-			  "Failed to connect to '%s'\n", url);
-		return ret;
-	}
-	return ret;
-}
-
 /*
   try to autodetect a basedn if none specified. This fixes one of my
   pet hates about ldapsearch, which is that you have to get a long,
diff --git a/source/lib/ldb/common/ldb_modules.c b/source/lib/ldb/common/ldb_modules.c
index fbfb5e5..4d69dc6 100644
--- a/source/lib/ldb/common/ldb_modules.c
+++ b/source/lib/ldb/common/ldb_modules.c
@@ -120,36 +120,149 @@ const char **ldb_modules_list_from_string(struct ldb_context *ldb, TALLOC_CTX *m
 	return m;
 }
 
+static struct backends_list_entry {
+	struct ldb_backend_ops *ops;
+	struct backends_list_entry *prev, *next;
+} *ldb_backends = NULL;
+
 static struct ops_list_entry {
 	const struct ldb_module_ops *ops;
 	struct ops_list_entry *next;	
 } *registered_modules = NULL;
 
-#define LDB_MODULE(name) (&ldb_ ## name ## _module_ops)
+static const struct ldb_builtins {
+	const struct ldb_backend_ops *backend_ops;
+	const struct ldb_module_ops *module_ops;
+} builtins[];
 
-#ifndef STATIC_LIBLDB_MODULES
+static ldb_connect_fn ldb_find_backend(const char *url)
+{
+	struct backends_list_entry *backend;
+	int i;
 
-#define STATIC_LIBLDB_MODULES \
-	LDB_MODULE(operational),	\
-	LDB_MODULE(rdn_name),	\
-	LDB_MODULE(paged_results),	\
-	LDB_MODULE(server_sort),		\
-	LDB_MODULE(asq), \
-	NULL
-#endif
+	for (i = 0; builtins[i].backend_ops || builtins[i].module_ops; i++) {
+		if (builtins[i].backend_ops == NULL) continue;
 
-const static struct ldb_module_ops *builtin_modules[] = {
-	STATIC_LIBLDB_MODULES
-};
+		if (strncmp(builtins[i].backend_ops->name, url,
+			    strlen(builtins[i].backend_ops->name)) == 0) {
+			return builtins[i].backend_ops->connect_fn;
+		}
+	}
+
+	for (backend = ldb_backends; backend; backend = backend->next) {
+		if (strncmp(backend->ops->name, url,
+			    strlen(backend->ops->name)) == 0) {
+			return backend->ops->connect_fn;
+		}
+	}
+
+	return NULL;
+}
+
+/*
+ register a new ldb backend
+*/
+int ldb_register_backend(const char *url_prefix, ldb_connect_fn connectfn)
+{
+	struct ldb_backend_ops *backend;
+	struct backends_list_entry *entry;
+
+	backend = talloc(talloc_autofree_context(), struct ldb_backend_ops);
+	if (!backend) return LDB_ERR_OPERATIONS_ERROR;
+
+	entry = talloc(talloc_autofree_context(), struct backends_list_entry);
+	if (!entry) {
+		talloc_free(backend);
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+
+	if (ldb_find_backend(url_prefix)) {
+		return LDB_SUCCESS;
+	}
+
+	/* Maybe check for duplicity here later on? */
+
+	backend->name = talloc_strdup(backend, url_prefix);
+	backend->connect_fn = connectfn;
+	entry->ops = backend;
+	DLIST_ADD(ldb_backends, entry);
+
+	return LDB_SUCCESS;
+}
+
+/*
+   Return the ldb module form of a database.
+   The URL can either be one of the following forms
+   ldb://path


-- 
Samba Shared Repository


More information about the samba-cvs mailing list