r5102: This is a major simplification of the logic for controlling top level
[abartlet/samba.git/.git] / source4 / passdb / secrets.c
index f7b9c02d8dfafb72c45a8b93bf4ae48a9cac522a..14e5642ae2d9953462da4cd8709a148a0120f8a8 100644 (file)
@@ -64,7 +64,7 @@ BOOL secrets_init(void)
        pstrcpy(fname, lp_private_dir());
        pstrcat(fname,"/secrets.tdb");
 
-       tdb = tdb_wrap_open(NULL, fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+       tdb = tdb_wrap_open(talloc_autofree_context(), fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 
        if (!tdb) {
                DEBUG(0,("Failed to open %s\n", fname));
@@ -88,7 +88,7 @@ BOOL secrets_init(void)
 /* read a entry from the secrets database - the caller must free the result
    if size is non-null then the size of the entry is put in there
  */
-static void *secrets_fetch(const char *key, size_t *size)
+void *secrets_fetch(const char *key, size_t *size)
 {
        TDB_DATA kbuf, dbuf;
        secrets_init();
@@ -170,3 +170,25 @@ void secrets_named_mutex_release(const char *name, size_t *p_ref_count)
        DEBUG(10,("secrets_named_mutex_release: ref_count for mutex %s = %u\n", name, (uint_t)ref_count ));
 }
 
+/*
+  connect to the schannel ldb
+*/
+struct ldb_wrap *secrets_db_connect(TALLOC_CTX *mem_ctx)
+{
+       char *path;
+       struct ldb_wrap *ldb;
+
+       path = private_path(mem_ctx, "secrets.ldb");
+       if (!path) {
+               return NULL;
+       }
+       
+       ldb = ldb_wrap_connect(mem_ctx, path, 0, NULL);
+       talloc_free(path);
+       if (!ldb) {
+               return NULL;
+       }
+
+       return ldb;
+}
+