passdb: Add a function to read secrets db from a specified path
authorAmitay Isaacs <amitay@gmail.com>
Wed, 10 Aug 2011 03:50:26 +0000 (13:50 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Sat, 13 Aug 2011 00:25:06 +0000 (10:25 +1000)
This allows to load secrets db from a different location. The original
secrets_init() now calls secrets_init_path() with lp_private_dir().

source3/include/secrets.h
source3/passdb/secrets.c

index 4c23335b58f296e59b47035f9171f1c7d7bec21f..3e36f2e899895371bbed30def04724a4ee28202a 100644 (file)
@@ -81,6 +81,7 @@ struct afs_keyfile {
 
 /* The following definitions come from passdb/secrets.c  */
 
+bool secrets_init_path(const char *private_dir);
 bool secrets_init(void);
 struct db_context *secrets_db_ctx(void);
 void secrets_shutdown(void);
index d39390e8c652c6616a0528df44b3299bcf170c91..d2296407933d059ad13357acd31dbe08e45bdc09 100644 (file)
@@ -55,19 +55,24 @@ static void get_rand_seed(void *userdata, int *new_seed)
        }
 }
 
-/* open up the secrets database */
-bool secrets_init(void)
+/* open up the secrets database with specified private_dir path */
+bool secrets_init_path(const char *private_dir)
 {
        char *fname = NULL;
        unsigned char dummy;
 
-       if (db_ctx != NULL)
+       if (db_ctx != NULL) {
                return True;
+       }
+
+       if (private_dir == NULL) {
+               return False;
+       }
 
        fname = talloc_asprintf(talloc_tos(), "%s/secrets.tdb",
-                               lp_private_dir());
+                               private_dir);
        if (fname == NULL) {
-               return false;
+               return False;
        }
 
        db_ctx = db_open(NULL, fname, 0,
@@ -75,7 +80,6 @@ bool secrets_init(void)
 
        if (db_ctx == NULL) {
                DEBUG(0,("Failed to open %s\n", fname));
-               TALLOC_FREE(fname);
                return False;
        }
 
@@ -95,6 +99,12 @@ bool secrets_init(void)
        return True;
 }
 
+/* open up the secrets database */
+bool secrets_init(void)
+{
+       return secrets_init_path(lp_private_dir());
+}
+
 struct db_context *secrets_db_ctx(void)
 {
        if (!secrets_init()) {