diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2010-10-10 23:25:38 +0200 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2010-10-10 23:25:38 +0200 |
commit | c1884f31ea13618cd3a94a30f9c413d176d1e258 (patch) | |
tree | 4c049b69f9f4b44503a0109d579e7893da25c8f7 /source4/dsdb/samdb/samdb.c | |
parent | 7f68870bc939e33df958f708ec7f46253fefadd9 (diff) | |
download | samba-c1884f31ea13618cd3a94a30f9c413d176d1e258.tar.gz |
ldb-samba: Add ldb_wrap_add, remove last schema reference from ldb_wrap.
Diffstat (limited to 'source4/dsdb/samdb/samdb.c')
-rw-r--r-- | source4/dsdb/samdb/samdb.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/source4/dsdb/samdb/samdb.c b/source4/dsdb/samdb/samdb.c index 8b0c0fec3f5..c2a1e9ec801 100644 --- a/source4/dsdb/samdb/samdb.c +++ b/source4/dsdb/samdb/samdb.c @@ -128,12 +128,27 @@ struct ldb_context *samdb_connect(TALLOC_CTX *mem_ctx, { struct ldb_context *ldb; struct dsdb_schema *schema; - ldb = ldb_wrap_connect(mem_ctx, ev_ctx, lp_ctx, - lpcfg_sam_url(lp_ctx), session_info, - samdb_credentials(ev_ctx, lp_ctx), - flags); + const char *url; + struct cli_credentials *credentials; + int ret; - if (!ldb) { + url = lpcfg_sam_url(lp_ctx); + credentials = samdb_credentials(ev_ctx, lp_ctx); + + ldb = ldb_wrap_find(url, ev_ctx, lp_ctx, session_info, credentials, flags); + if (ldb != NULL) + return talloc_reference(mem_ctx, ldb); + + ldb = samba_ldb_init(mem_ctx, ev_ctx, lp_ctx, session_info, credentials); + + if (ldb == NULL) + return NULL; + + dsdb_set_global_schema(ldb); + + ret = samba_ldb_connect(ldb, lp_ctx, url, flags); + if (ret != LDB_SUCCESS) { + talloc_free(ldb); return NULL; } @@ -143,6 +158,11 @@ struct ldb_context *samdb_connect(TALLOC_CTX *mem_ctx, dsdb_make_schema_global(ldb, schema); } + if (!ldb_wrap_add(url, ev_ctx, lp_ctx, session_info, credentials, flags, ldb)) { + talloc_free(ldb); + return NULL; + } + return ldb; } |