r18830: ensure backends aren't added twice (needed for samba3)
authorAndrew Tridgell <tridge@samba.org>
Fri, 22 Sep 2006 23:21:36 +0000 (23:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:19:15 +0000 (14:19 -0500)
(This used to be commit 54b864b491d8a10c28833d28b764262503a72e91)

source4/lib/ldb/common/ldb.c

index 1aae76bad61607326b429c20e7b88bee022d707c..760a3113832fc8aa4e62a220b0e1f8cacc492a2f 100644 (file)
@@ -61,6 +61,21 @@ static struct ldb_backend {
        ldb_connect_fn connect_fn;
        struct ldb_backend *prev, *next;
 } *ldb_backends = NULL;
+
+
+static ldb_connect_fn ldb_find_backend(const char *url)
+{
+       struct ldb_backend *backend;
+
+       for (backend = ldb_backends; backend; backend = backend->next) {
+               if (strncmp(backend->name, url, strlen(backend->name)) == 0) {
+                       return backend->connect_fn;
+               }
+       }
+
+       return NULL;
+}
+
 /*
  register a new ldb backend
 */
@@ -68,6 +83,10 @@ int ldb_register_backend(const char *url_prefix, ldb_connect_fn connectfn)
 {
        struct ldb_backend *backend = talloc(talloc_autofree_context(), struct ldb_backend);
 
+       if (ldb_find_backend(url_prefix)) {
+               return LDB_SUCCESS;
+       }
+
        /* Maybe check for duplicity here later on? */
 
        backend->name = talloc_strdup(backend, url_prefix);
@@ -77,19 +96,6 @@ int ldb_register_backend(const char *url_prefix, ldb_connect_fn connectfn)
        return LDB_SUCCESS;
 }
 
-static ldb_connect_fn ldb_find_backend(const char *url)
-{
-       struct ldb_backend *backend;
-
-       for (backend = ldb_backends; backend; backend = backend->next) {
-               if (strncmp(backend->name, url, strlen(backend->name)) == 0) {
-                       return backend->connect_fn;
-               }
-       }
-
-       return NULL;
-}
-
 /* 
    Return the ldb module form of a database. The URL can either be one of the following forms
    ldb://path