ldb: Introduce new generic ldb:// prefix to allow backend autodetection
authorGary Lockyer <gary@catalyst.net.nz>
Tue, 6 Mar 2018 02:11:23 +0000 (15:11 +1300)
committerStefan Metzmacher <metze@samba.org>
Thu, 12 Apr 2018 13:06:22 +0000 (15:06 +0200)
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/ldb/ldb_ldb/ldb_ldb.c [new file with mode: 0644]
lib/ldb/wscript

diff --git a/lib/ldb/ldb_ldb/ldb_ldb.c b/lib/ldb/ldb_ldb/ldb_ldb.c
new file mode 100644 (file)
index 0000000..3e4398f
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * ldb connection and module initialisation
+ *
+ *  Copyright (C) Andrew Bartlett <abartlet@samba.org> 2018
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#include "ldb_private.h"
+#include "../ldb_tdb/ldb_tdb.h"
+
+/*
+  connect to the database
+*/
+static int lldb_connect(struct ldb_context *ldb,
+                       const char *url,
+                       unsigned int flags,
+                       const char *options[],
+                       struct ldb_module **module)
+{
+       const char *path;
+       int ret;
+
+       /*
+        * Check and remove the url prefix
+        */
+       if (strchr(url, ':')) {
+               if (strncmp(url, "ldb://", 6) != 0) {
+                       ldb_debug(ldb, LDB_DEBUG_ERROR,
+                                 "Invalid ldb URL '%s'", url);
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
+               path = url+6;
+       } else {
+               path = url;
+       }
+
+       /*
+        * Don't create the database if it's not there
+        */
+       flags |= LDB_FLG_DONT_CREATE_DB;
+       ret = ltdb_connect(ldb, path, flags, options, module);
+       return ret;
+}
+
+int ldb_ldb_init(const char *version)
+{
+       LDB_MODULE_CHECK_VERSION(version);
+       return ldb_register_backend("ldb", lldb_connect, false);
+}
index aab4da132d5c6996a2c9f8c89da055c4f3e04484..35549d528fd6b6e462dcd415cd553145c34d082f 100644 (file)
@@ -321,6 +321,15 @@ def build(bld):
                           private_library=True,
                           deps='tdb ldb')
 
+        bld.SAMBA_MODULE('ldb_ldb',
+                         bld.SUBDIR('ldb_ldb',
+                                    '''ldb_ldb.c'''),
+                         init_function='ldb_ldb_init',
+                         module_init_name='ldb_init_module',
+                         internal_module=False,
+                         deps='ldb ldb_key_value',
+                         subsystem='ldb')
+
         # have a separate subsystem for common/ldb.c, so it can rebuild
         # for install with a different -DLDB_MODULESDIR=
         bld.SAMBA_SUBSYSTEM('LIBLDB_MAIN',