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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> Date: Fri Jun 27 15:33:36 2008 +0200 smb_build: use MERGED_OBJ instead of STATIC_LIBRARY metze commit be3f3e18d476431f991d08317eb94b4aebe927e6 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Jun 27 15:31:35 2008 +0200 smb_build: enable implicit make rules metze commit 1d5b714438a955d76f92f4ccd8aa2f7f89ffa5fd Author: Stefan Metzmacher <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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