From: Andreas Schneider Date: Wed, 24 Mar 2021 09:06:18 +0000 (+0100) Subject: s3:passdb: Add secrets_store_creds() X-Git-Tag: tevent-0.11.0~1347 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2cab43cfca094c21899daddadfcb84469c0e2a02;p=thirdparty%2Fsamba.git s3:passdb: Add secrets_store_creds() Signed-off-by: Andreas Schneider Reviewed-by: Ralph Boehme --- diff --git a/source3/include/secrets.h b/source3/include/secrets.h index 24ae5bd0664..2478561cee7 100644 --- a/source3/include/secrets.h +++ b/source3/include/secrets.h @@ -56,6 +56,8 @@ #define SECRETS_AUTH_DOMAIN "SECRETS/AUTH_DOMAIN" #define SECRETS_AUTH_PASSWORD "SECRETS/AUTH_PASSWORD" +struct cli_credentials; + /* structure for storing machine account password (ie. when samba server is member of a domain */ struct machine_acct_pass { @@ -89,6 +91,7 @@ struct db_context *secrets_db_ctx(void); void secrets_shutdown(void); void *secrets_fetch(const char *key, size_t *size); bool secrets_store(const char *key, const void *data, size_t size); +bool secrets_store_creds(struct cli_credentials *creds); bool secrets_delete_entry(const char *key); bool secrets_delete(const char *key); diff --git a/source3/passdb/secrets.c b/source3/passdb/secrets.c index 2b2206070e2..be9cc0039d3 100644 --- a/source3/passdb/secrets.c +++ b/source3/passdb/secrets.c @@ -31,6 +31,7 @@ #include "dbwrap/dbwrap_open.h" #include "../libcli/security/security.h" #include "util_tdb.h" +#include "auth/credentials/credentials.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_PASSDB @@ -143,6 +144,49 @@ bool secrets_store(const char *key, const void *data, size_t size) return NT_STATUS_IS_OK(status); } +bool secrets_store_creds(struct cli_credentials *creds) +{ + const char *p = NULL; + bool ok; + + p = cli_credentials_get_username(creds); + if (p == NULL) { + return false; + } + + ok = secrets_store(SECRETS_AUTH_USER, p, strlen(p) + 1); + if (!ok) { + DBG_ERR("Failed storing auth user name\n"); + return false; + } + + + p = cli_credentials_get_domain(creds); + if (p == NULL) { + return false; + } + + ok = secrets_store(SECRETS_AUTH_DOMAIN, p, strlen(p) + 1); + if (!ok) { + DBG_ERR("Failed storing auth domain name\n"); + return 1; + } + + + p = cli_credentials_get_password(creds); + if (p == NULL) { + return false; + } + + ok = secrets_store(SECRETS_AUTH_PASSWORD, p, strlen(p) + 1); + if (!ok) { + DBG_ERR("Failed storing auth password\n"); + return false; + } + + return true; +} + /* delete a secets database entry */ diff --git a/source3/wscript_build b/source3/wscript_build index 9cd351b2b5d..ff7bfdfd5e7 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -490,6 +490,7 @@ bld.SAMBA3_LIBRARY('secrets3', dbwrap krb5samba LIBCLI_AUTH + samba-credentials ''', private_library=True)