From: Gary Lockyer Date: Tue, 6 Mar 2018 02:11:23 +0000 (+1300) Subject: ldb: Introduce new generic ldb:// prefix to allow backend autodetection X-Git-Tag: ldb-1.4.0~443 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1bff2ae12880ea5a22ce53f7e2732af740c04ac3;p=thirdparty%2Fsamba.git ldb: Introduce new generic ldb:// prefix to allow backend autodetection Signed-off-by: Gary Lockyer Signed-off-by: Garming Sam Reviewed-by: Andrew Bartlett Reviewed-by: Stefan Metzmacher --- diff --git a/lib/ldb/ldb_ldb/ldb_ldb.c b/lib/ldb/ldb_ldb/ldb_ldb.c new file mode 100644 index 00000000000..3e4398f5c17 --- /dev/null +++ b/lib/ldb/ldb_ldb/ldb_ldb.c @@ -0,0 +1,61 @@ +/* + * ldb connection and module initialisation + * + * Copyright (C) Andrew Bartlett 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 . + * + */ +#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); +} diff --git a/lib/ldb/wscript b/lib/ldb/wscript index aab4da132d5..35549d528fd 100644 --- a/lib/ldb/wscript +++ b/lib/ldb/wscript @@ -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',