#include "lib/ldb/include/ldb.h"
#include "db_wrap.h"
-struct ldb_wrap {
- struct ldb_context *ldb;
-
- const char *url;
- struct ldb_wrap *next, *prev;
-};
-
-static struct ldb_wrap *ldb_list;
static struct tdb_wrap *tdb_list;
/*
free(s);
}
-/* destroy the last connection to a ldb */
-static int ldb_wrap_destructor(void *ctx)
-{
- struct ldb_wrap *w = ctx;
- DLIST_REMOVE(ldb_list, w);
- return 0;
-}
-
/*
wrapped connection to a ldb database
to close just talloc_free() the returned ldb_context
const char *options[])
{
struct ldb_context *ldb;
- struct ldb_wrap *w;
int ret;
struct event_context *ev;
+ char *real_url = NULL;
-
- for (w = ldb_list; w; w = w->next) {
- if (strcmp(url, w->url) == 0) {
- return talloc_reference(mem_ctx, w->ldb);
- }
- }
-
- ldb = ldb_init(talloc_autofree_context());
+ ldb = ldb_init(mem_ctx);
if (ldb == NULL) {
return NULL;
}
if (ev) {
ldb_set_opaque(ldb, "EventContext", ev);
} else {
- DEBUG(0,("WARNING: event_context not found\n"));
- talloc_show_parents(mem_ctx, stdout);
+ DEBUG(5,("WARNING: event_context not found\n"));
}
ret = ldb_register_samba_handlers(ldb);
talloc_free(ldb);
return NULL;
}
-
- ret = ldb_connect(ldb, url, flags, options);
- if (ret == -1) {
+
+ real_url = private_path(ldb, url);
+ if (real_url == NULL) {
talloc_free(ldb);
return NULL;
}
-
- w = talloc(ldb, struct ldb_wrap);
- if (w == NULL) {
+
+ ret = ldb_connect(ldb, real_url, flags, options);
+ if (ret == -1) {
talloc_free(ldb);
return NULL;
}
- w->ldb = ldb;
- w->url = talloc_strdup(w, url);
+ talloc_free(real_url);
- talloc_set_destructor(w, ldb_wrap_destructor);
ldb_set_debug(ldb, ldb_wrap_debug, NULL);
- DLIST_ADD(ldb_list, w);
-
return ldb;
}