diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2008-05-10 18:08:00 +0200 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2008-05-10 18:08:00 +0200 |
commit | 7b45a4d7fafd7ffa848ababf3f70d19bc1b1ac34 (patch) | |
tree | bd2cbe93e80692486c969a80cfececbf8bb6dcdd /source4/auth/credentials/credentials_ntlm.c | |
parent | cc9c4aaa8d02c4c31c9e9a4bb53e5941683fcc31 (diff) | |
parent | bc4eacb5d89ca8dca123e2d6bd6eba47ed93b771 (diff) | |
download | samba-7b45a4d7fafd7ffa848ababf3f70d19bc1b1ac34.tar.gz samba-7b45a4d7fafd7ffa848ababf3f70d19bc1b1ac34.tar.bz2 samba-7b45a4d7fafd7ffa848ababf3f70d19bc1b1ac34.zip |
Merge branch 'v4-0-test' into v4-0-gmake3
Conflicts:
source/auth/config.mk
source/auth/gensec/config.mk
source/torture/smbtorture.c
(This used to be commit edfd02e59bba86b977bd60848f57a614691fff7a)
Diffstat (limited to 'source4/auth/credentials/credentials_ntlm.c')
-rw-r--r-- | source4/auth/credentials/credentials_ntlm.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source4/auth/credentials/credentials_ntlm.c b/source4/auth/credentials/credentials_ntlm.c index b88f2018df..22e273c35a 100644 --- a/source4/auth/credentials/credentials_ntlm.c +++ b/source4/auth/credentials/credentials_ntlm.c @@ -52,6 +52,20 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred const struct samr_Password *nt_hash; lm_session_key = data_blob(NULL, 0); + /* We may already have an NTLM response we prepared earlier. + * This is used for NTLM pass-though authentication */ + if (cred->nt_response.data || cred->lm_response.data) { + *_nt_response = cred->nt_response; + *_lm_response = cred->lm_response; + + if (!cred->lm_response.data) { + *flags = *flags & ~CLI_CRED_LANMAN_AUTH; + } + *_lm_session_key = data_blob(NULL, 0); + *_session_key = data_blob(NULL, 0); + return NT_STATUS_OK; + } + nt_hash = cli_credentials_get_nt_hash(cred, mem_ctx); cli_credentials_get_ntlm_username_domain(cred, mem_ctx, &user, &domain); @@ -215,3 +229,41 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred return NT_STATUS_OK; } +_PUBLIC_ bool cli_credentials_set_nt_hash(struct cli_credentials *cred, + const struct samr_Password *nt_hash, + enum credentials_obtained obtained) +{ + if (obtained >= cred->password_obtained) { + cli_credentials_set_password(cred, NULL, obtained); + if (nt_hash) { + cred->nt_hash = talloc(cred, struct samr_Password); + *cred->nt_hash = *nt_hash; + } else { + cred->nt_hash = NULL; + } + return true; + } + + return false; +} + +_PUBLIC_ bool cli_credentials_set_ntlm_response(struct cli_credentials *cred, + const DATA_BLOB *lm_response, + const DATA_BLOB *nt_response, + enum credentials_obtained obtained) +{ + if (obtained >= cred->password_obtained) { + cli_credentials_set_password(cred, NULL, obtained); + if (nt_response) { + cred->nt_response = data_blob_talloc(cred, nt_response->data, nt_response->length); + talloc_steal(cred, cred->nt_response.data); + } + if (nt_response) { + cred->lm_response = data_blob_talloc(cred, lm_response->data, lm_response->length); + } + return true; + } + + return false; +} + |