summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/common
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-06-18 07:42:21 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:18:24 -0500
commited3d8091ce2b2014350a2f7f22202dde6846a130 (patch)
tree8c1d6ee74907c2c0c2e82b9476ad1db08d7a2179 /source4/lib/ldb/common
parentd4d6d0d2e54510690fa3f868ad02625bc24e5b9d (diff)
downloadsamba-ed3d8091ce2b2014350a2f7f22202dde6846a130.tar.gz
samba-ed3d8091ce2b2014350a2f7f22202dde6846a130.tar.bz2
samba-ed3d8091ce2b2014350a2f7f22202dde6846a130.zip
r7709: - convert ldb to use popt, so that it can interact with the samba
cmdline credentials code (which will be done soon) - added a ldb_init() call, and changed ldb_connect() to take a ldb context. This allows for much better error handling in ldb_connect(), and also made the popt conversion easier - fixed up all the existing backends with the new syntax - improved error handling in *_connect() - fixed a crash bug in the new case_fold_required() code - ensured that ltdb_rename() and all ltdb_search() paths get the read lock - added a ldb_oom() macro to make it easier to report out of memory situations in ldb code (This used to be commit f648fdf187669d6d87d01dd4e786b03cd420f220)
Diffstat (limited to 'source4/lib/ldb/common')
-rw-r--r--source4/lib/ldb/common/ldb.c48
-rw-r--r--source4/lib/ldb/common/ldb_utf8.c2
-rw-r--r--source4/lib/ldb/common/util.c57
3 files changed, 30 insertions, 77 deletions
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index 2d0d09de3e..d2dbac95ea 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -37,6 +37,16 @@
#include "ldb/include/ldb_private.h"
/*
+ initialise a ldb context
+ The mem_ctx is optional
+*/
+struct ldb_context *ldb_init(void *mem_ctx)
+{
+ struct ldb_context *ldb = talloc_zero(mem_ctx, struct ldb_context);
+ return ldb;
+}
+
+/*
connect to a database. The URL can either be one of the following forms
ldb://path
ldapi://path
@@ -46,45 +56,45 @@
the options are passed uninterpreted to the backend, and are
backend specific
*/
-struct ldb_context *ldb_connect(const char *url, unsigned int flags,
- const char *options[])
+int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[])
{
- struct ldb_context *ldb_ctx = NULL;
+ int ret;
if (strncmp(url, "tdb:", 4) == 0 ||
strchr(url, ':') == NULL) {
- ldb_ctx = ltdb_connect(url, flags, options);
+ ret = ltdb_connect(ldb, url, flags, options);
}
#if HAVE_ILDAP
- if (strncmp(url, "ldap", 4) == 0) {
- ldb_ctx = ildb_connect(url, flags, options);
+ else if (strncmp(url, "ldap", 4) == 0) {
+ ret = ildb_connect(ldb, url, flags, options);
}
#elif HAVE_LDAP
- if (strncmp(url, "ldap", 4) == 0) {
- ldb_ctx = lldb_connect(url, flags, options);
+ else if (strncmp(url, "ldap", 4) == 0) {
+ ret = lldb_connect(ldb, url, flags, options);
}
#endif
-
#if HAVE_SQLITE3
- if (strncmp(url, "sqlite:", 7) == 0) {
+ else if (strncmp(url, "sqlite:", 7) == 0) {
ldb_ctx = lsqlite3_connect(url, flags, options);
}
#endif
+ else {
+ ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to find backend for '%s'", url);
+ return -1;
+ }
-
- if (!ldb_ctx) {
- errno = EINVAL;
- return NULL;
+ if (ret != 0) {
+ ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to connect to '%s'", url);
+ return ret;
}
- if (ldb_load_modules(ldb_ctx, options) != 0) {
- talloc_free(ldb_ctx);
- errno = EINVAL;
- return NULL;
+ if (ldb_load_modules(ldb, options) != 0) {
+ ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to load modules for '%s'", url);
+ return -1;
}
- return ldb_ctx;
+ return 0;
}
/*
diff --git a/source4/lib/ldb/common/ldb_utf8.c b/source4/lib/ldb/common/ldb_utf8.c
index 35249c4b70..ae35ad81b6 100644
--- a/source4/lib/ldb/common/ldb_utf8.c
+++ b/source4/lib/ldb/common/ldb_utf8.c
@@ -135,7 +135,7 @@ char *ldb_dn_fold(void * mem_ctx,
}
if (*value == 0) goto failed;
- case_fold_required = (* case_fold_attr_fn)(user_data, attr);
+ case_fold_required = case_fold_attr_fn(user_data, attr);
attr = ldb_casefold(tmp_ctx, attr);
if (attr == NULL) goto failed;
diff --git a/source4/lib/ldb/common/util.c b/source4/lib/ldb/common/util.c
index c2fd72acd1..e69de29bb2 100644
--- a/source4/lib/ldb/common/util.c
+++ b/source4/lib/ldb/common/util.c
@@ -1,57 +0,0 @@
-/*
- ldb database library
-
- Copyright (C) Andrew Tridgell 2004
-
- ** NOTE! The following LGPL license applies to the ldb
- ** library. This does NOT imply that all of Samba is released
- ** under the LGPL
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-/*
- * Name: ldb
- *
- * Component: ldb utility functions
- *
- * Description: miscellanous utility functions for ldb
- *
- * Author: Andrew Tridgell
- */
-
-#include "includes.h"
-#include "ldb/include/ldb.h"
-#include "ldb/include/ldb_private.h"
-
-
-/*
- common code for parsing -o options in ldb tools
-*/
-const char **ldb_options_parse(const char **options, int *ldbopts, const char *arg)
-{
- if (*ldbopts == 0) {
- options = malloc(sizeof(char *) * 2);
- } else {
- options = realloc(options, sizeof(char *)*((*ldbopts)+2));
- }
- if (options == NULL) {
- fprintf(stderr, "Out of memory in options parsing!\n");
- exit(-1);
- }
- options[(*ldbopts)++] = arg;
- options[*ldbopts] = NULL;
- return options;
-}