mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
s3-passdb: move open_schannel_session_store() to passdb/secrets_schannel.c.
Guenther
This commit is contained in:
parent
96bffa5bbd
commit
4df8426768
@ -4709,7 +4709,6 @@ NTSTATUS secrets_trusted_domains(TALLOC_CTX *mem_ctx, uint32 *num_domains,
|
||||
bool secrets_store_afs_keyfile(const char *cell, const struct afs_keyfile *keyfile);
|
||||
bool secrets_fetch_afs_key(const char *cell, struct afs_key *result);
|
||||
void secrets_fetch_ipc_userpass(char **username, char **domain, char **password);
|
||||
TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx);
|
||||
bool secrets_store_generic(const char *owner, const char *key, const char *secret);
|
||||
char *secrets_fetch_generic(const char *owner, const char *key);
|
||||
bool secrets_delete_generic(const char *owner, const char *key);
|
||||
@ -4718,6 +4717,7 @@ bool secrets_fetch_local_schannel_key(uint8_t schannel_key[16]);
|
||||
|
||||
/* The following definitions come from passdb/secrets_schannel.c */
|
||||
|
||||
TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx);
|
||||
NTSTATUS schannel_fetch_session_key(TALLOC_CTX *mem_ctx,
|
||||
const char *computer_name,
|
||||
struct netlogon_creds_CredentialState **pcreds);
|
||||
|
@ -1132,69 +1132,6 @@ void secrets_fetch_ipc_userpass(char **username, char **domain, char **password)
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Open or create the schannel session store tdb.
|
||||
*******************************************************************************/
|
||||
|
||||
#define SCHANNEL_STORE_VERSION_1 1
|
||||
#define SCHANNEL_STORE_VERSION_2 2 /* should not be used */
|
||||
#define SCHANNEL_STORE_VERSION_CURRENT SCHANNEL_STORE_VERSION_1
|
||||
|
||||
TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
TDB_DATA vers;
|
||||
uint32 ver;
|
||||
TDB_CONTEXT *tdb_sc = NULL;
|
||||
char *fname = talloc_asprintf(mem_ctx, "%s/schannel_store.tdb", lp_private_dir());
|
||||
|
||||
if (!fname) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tdb_sc = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
|
||||
if (!tdb_sc) {
|
||||
DEBUG(0,("open_schannel_session_store: Failed to open %s\n", fname));
|
||||
TALLOC_FREE(fname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
again:
|
||||
vers = tdb_fetch_bystring(tdb_sc, "SCHANNEL_STORE_VERSION");
|
||||
if (vers.dptr == NULL) {
|
||||
/* First opener, no version. */
|
||||
SIVAL(&ver,0,SCHANNEL_STORE_VERSION_CURRENT);
|
||||
vers.dptr = (uint8 *)&ver;
|
||||
vers.dsize = 4;
|
||||
tdb_store_bystring(tdb_sc, "SCHANNEL_STORE_VERSION", vers, TDB_REPLACE);
|
||||
vers.dptr = NULL;
|
||||
} else if (vers.dsize == 4) {
|
||||
ver = IVAL(vers.dptr,0);
|
||||
if (ver == SCHANNEL_STORE_VERSION_2) {
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number %d in %s\n",
|
||||
(int)ver, fname ));
|
||||
tdb_wipe_all(tdb_sc);
|
||||
goto again;
|
||||
}
|
||||
if (ver != SCHANNEL_STORE_VERSION_CURRENT) {
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number %d in %s\n",
|
||||
(int)ver, fname ));
|
||||
tdb_close(tdb_sc);
|
||||
tdb_sc = NULL;
|
||||
}
|
||||
} else {
|
||||
tdb_close(tdb_sc);
|
||||
tdb_sc = NULL;
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number size %d in %s\n",
|
||||
(int)vers.dsize, fname ));
|
||||
}
|
||||
|
||||
SAFE_FREE(vers.dptr);
|
||||
TALLOC_FREE(fname);
|
||||
|
||||
return tdb_sc;
|
||||
}
|
||||
|
||||
bool secrets_store_generic(const char *owner, const char *key, const char *secret)
|
||||
{
|
||||
char *tdbkey = NULL;
|
||||
|
@ -20,6 +20,69 @@
|
||||
#include "../libcli/auth/libcli_auth.h"
|
||||
#include "../libcli/auth/schannel_state.h"
|
||||
|
||||
/******************************************************************************
|
||||
Open or create the schannel session store tdb.
|
||||
*******************************************************************************/
|
||||
|
||||
#define SCHANNEL_STORE_VERSION_1 1
|
||||
#define SCHANNEL_STORE_VERSION_2 2 /* should not be used */
|
||||
#define SCHANNEL_STORE_VERSION_CURRENT SCHANNEL_STORE_VERSION_1
|
||||
|
||||
TDB_CONTEXT *open_schannel_session_store(TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
TDB_DATA vers;
|
||||
uint32 ver;
|
||||
TDB_CONTEXT *tdb_sc = NULL;
|
||||
char *fname = talloc_asprintf(mem_ctx, "%s/schannel_store.tdb", lp_private_dir());
|
||||
|
||||
if (!fname) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tdb_sc = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
|
||||
if (!tdb_sc) {
|
||||
DEBUG(0,("open_schannel_session_store: Failed to open %s\n", fname));
|
||||
TALLOC_FREE(fname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
again:
|
||||
vers = tdb_fetch_bystring(tdb_sc, "SCHANNEL_STORE_VERSION");
|
||||
if (vers.dptr == NULL) {
|
||||
/* First opener, no version. */
|
||||
SIVAL(&ver,0,SCHANNEL_STORE_VERSION_CURRENT);
|
||||
vers.dptr = (uint8 *)&ver;
|
||||
vers.dsize = 4;
|
||||
tdb_store_bystring(tdb_sc, "SCHANNEL_STORE_VERSION", vers, TDB_REPLACE);
|
||||
vers.dptr = NULL;
|
||||
} else if (vers.dsize == 4) {
|
||||
ver = IVAL(vers.dptr,0);
|
||||
if (ver == SCHANNEL_STORE_VERSION_2) {
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number %d in %s\n",
|
||||
(int)ver, fname ));
|
||||
tdb_wipe_all(tdb_sc);
|
||||
goto again;
|
||||
}
|
||||
if (ver != SCHANNEL_STORE_VERSION_CURRENT) {
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number %d in %s\n",
|
||||
(int)ver, fname ));
|
||||
tdb_close(tdb_sc);
|
||||
tdb_sc = NULL;
|
||||
}
|
||||
} else {
|
||||
tdb_close(tdb_sc);
|
||||
tdb_sc = NULL;
|
||||
DEBUG(0,("open_schannel_session_store: wrong version number size %d in %s\n",
|
||||
(int)vers.dsize, fname ));
|
||||
}
|
||||
|
||||
SAFE_FREE(vers.dptr);
|
||||
TALLOC_FREE(fname);
|
||||
|
||||
return tdb_sc;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Wrapper around schannel_fetch_session_key_tdb()
|
||||
Note we must be root here.
|
||||
|
Loading…
Reference in New Issue
Block a user