summaryrefslogtreecommitdiffstats
path: root/source/passdb/secrets.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-10-11 09:35:01 +0000
committerJeremy Allison <jra@samba.org>2001-10-11 09:35:01 +0000
commitf0b5382869d12249e593ac2f10fc9f1f9d03bae6 (patch)
tree97543b143f7e42dfdfd7e6e46ad22d0fd59bcdab /source/passdb/secrets.c
parent8d4870bccd026d059c160de3642bb427338256ec (diff)
downloadsamba-f0b5382869d12249e593ac2f10fc9f1f9d03bae6.tar.gz
samba-f0b5382869d12249e593ac2f10fc9f1f9d03bae6.tar.xz
samba-f0b5382869d12249e593ac2f10fc9f1f9d03bae6.zip
Sync-up with SAMBA_2_2 branch.
Jeremy.
Diffstat (limited to 'source/passdb/secrets.c')
-rw-r--r--source/passdb/secrets.c70
1 files changed, 55 insertions, 15 deletions
diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c
index be528abae73..856adec244b 100644
--- a/source/passdb/secrets.c
+++ b/source/passdb/secrets.c
@@ -30,18 +30,14 @@ static TDB_CONTEXT *tdb;
BOOL secrets_init(void)
{
pstring fname;
- char *p;
-
- if (tdb) return True;
- pstrcpy(fname, lp_smb_passwd_file());
- p = strrchr(fname, '/');
- if(!p) return False;
+ if (tdb)
+ return True;
- *p = 0;
+ get_private_directory(fname);
pstrcat(fname,"/secrets.tdb");
- tdb = tdb_open_log(fname, 0, 0, O_RDWR|O_CREAT, 0600);
+ tdb = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
if (!tdb) {
DEBUG(0,("Failed to open %s\n", fname));
@@ -56,11 +52,13 @@ BOOL secrets_init(void)
void *secrets_fetch(char *key, size_t *size)
{
TDB_DATA kbuf, dbuf;
- if (!tdb) return False;
+ if (!tdb)
+ return False;
kbuf.dptr = key;
kbuf.dsize = strlen(key);
dbuf = tdb_fetch(tdb, kbuf);
- if (size) *size = dbuf.dsize;
+ if (size)
+ *size = dbuf.dsize;
return dbuf.dptr;
}
@@ -69,7 +67,8 @@ void *secrets_fetch(char *key, size_t *size)
BOOL secrets_store(char *key, void *data, size_t size)
{
TDB_DATA kbuf, dbuf;
- if (!tdb) return False;
+ if (!tdb)
+ return False;
kbuf.dptr = key;
kbuf.dsize = strlen(key);
dbuf.dptr = data;
@@ -83,7 +82,8 @@ BOOL secrets_store(char *key, void *data, size_t size)
BOOL secrets_delete(char *key)
{
TDB_DATA kbuf;
- if (!tdb) return False;
+ if (!tdb)
+ return False;
kbuf.dptr = key;
kbuf.dsize = strlen(key);
return tdb_delete(tdb, kbuf) == 0;
@@ -110,8 +110,7 @@ BOOL secrets_fetch_domain_sid(char *domain, DOM_SID *sid)
if (dyn_sid == NULL)
return False;
- if (size != sizeof(DOM_SID))
- {
+ if (size != sizeof(DOM_SID)) {
free(dyn_sid);
return False;
}
@@ -121,10 +120,10 @@ BOOL secrets_fetch_domain_sid(char *domain, DOM_SID *sid)
return True;
}
-
/************************************************************************
form a key for fetching a domain trust password
************************************************************************/
+
char *trust_keystr(char *domain)
{
static fstring keystr;
@@ -212,3 +211,44 @@ void reset_globals_after_fork(void)
*/
generate_random_buffer( &dummy, 1, True);
}
+
+BOOL secrets_store_ldap_pw(char* dn, char* pw)
+{
+ fstring key;
+ char *p;
+
+ pstrcpy(key, dn);
+ for (p=key; *p; p++)
+ if (*p == ',') *p = '/';
+
+ return secrets_store(key, pw, strlen(pw));
+}
+
+BOOL fetch_ldap_pw(char *dn, char* pw, int len)
+{
+ fstring key;
+ char *p;
+ void *data = NULL;
+ size_t size;
+
+ pstrcpy(key, dn);
+ for (p=key; *p; p++)
+ if (*p == ',') *p = '/';
+
+ data=secrets_fetch(key, &size);
+ if (!size) {
+ DEBUG(0,("fetch_ldap_pw: no ldap secret retrieved!\n"));
+ return False;
+ }
+
+ if (size > len-1)
+ {
+ DEBUG(0,("fetch_ldap_pw: ldap secret is too long (%d > %d)!\n", size, len-1));
+ return False;
+ }
+
+ memcpy(pw, data, size);
+ pw[size] = '\0';
+
+ return True;
+}