1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

Dmitry Bartsevich made the SSPI support work on Windows 9x as well

This commit is contained in:
Daniel Stenberg 2005-09-19 21:45:16 +00:00
parent 6a48639c68
commit 3fe5311967
3 changed files with 23 additions and 7 deletions

View File

@ -7,6 +7,9 @@
Changelog Changelog
Daniel (19 September 2005)
- Dmitry Bartsevich made the SSPI support work on Windows 9x as well.
Daniel (15 September 2005) Daniel (15 September 2005)
- Added a TFTP server to the test suite and made the test suite capable of - Added a TFTP server to the test suite and made the test suite capable of
using it. using it.

View File

@ -16,6 +16,7 @@ This release includes the following changes:
This release includes the following bugfixes: This release includes the following bugfixes:
o SSPI works even for Windows 9x
o crash in --dump-header on FTP o crash in --dump-header on FTP
o test 56 runs better o test 56 runs better
@ -28,6 +29,6 @@ Other curl-related news since the previous public release:
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
o John Kelly, Nicolas François, Scott Davis, Ben Madsen o John Kelly, Nicolas François, Scott Davis, Ben Madsen, Dmitry Bartsevich
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -387,6 +387,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
ULONG attrs; ULONG attrs;
const char *user; const char *user;
int domlen; int domlen;
TimeStamp tsDummy; /* For Windows 9x compatibility of SPPI calls */
ntlm_sspi_cleanup(ntlm); ntlm_sspi_cleanup(ntlm);
@ -430,8 +431,8 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
if (AcquireCredentialsHandle( if (AcquireCredentialsHandle(
NULL, (char *)"NTLM", SECPKG_CRED_OUTBOUND, NULL, ntlm->p_identity, NULL, (char *)"NTLM", SECPKG_CRED_OUTBOUND, NULL, ntlm->p_identity,
NULL, NULL, &ntlm->handle, NULL NULL, NULL, &ntlm->handle, &tsDummy
) != SEC_E_OK) { ) != SEC_E_OK) {
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
} }
@ -447,12 +448,22 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
ISC_REQ_REPLAY_DETECT | ISC_REQ_REPLAY_DETECT |
ISC_REQ_CONNECTION, ISC_REQ_CONNECTION,
0, SECURITY_NETWORK_DREP, NULL, 0, 0, SECURITY_NETWORK_DREP, NULL, 0,
&ntlm->c_handle, &desc, &attrs, NULL &ntlm->c_handle, &desc, &attrs, &tsDummy
); );
if (status == SEC_I_COMPLETE_AND_CONTINUE || if (status == SEC_I_COMPLETE_AND_CONTINUE ||
status == SEC_I_CONTINUE_NEEDED) { status == SEC_I_CONTINUE_NEEDED) {
CompleteAuthToken(&ntlm->c_handle, &desc); /* CompleteAuthToken() is not present in Win9x, so load it dynamically */
SECURITY_STATUS (SEC_ENTRY * pCompleteAuthToken)
(PCtxtHandle,PSecBufferDesc);
HMODULE hSecur32 = GetModuleHandle("secur32.dll");
if (hSecur32 != NULL) {
*((void**)&pCompleteAuthToken) =
(void*)GetProcAddress(hSecur32, "CompleteAuthToken");
if( pCompleteAuthToken != NULL ) {
pCompleteAuthToken(&ntlm->c_handle, &desc);
}
}
} }
else if (status != SEC_E_OK) { else if (status != SEC_E_OK) {
FreeCredentialsHandle(&ntlm->handle); FreeCredentialsHandle(&ntlm->handle);
@ -553,6 +564,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
SecBufferDesc type_2_desc, type_3_desc; SecBufferDesc type_2_desc, type_3_desc;
SECURITY_STATUS status; SECURITY_STATUS status;
ULONG attrs; ULONG attrs;
TimeStamp tsDummy; /* For Windows 9x compatibility of SPPI calls */
type_2_desc.ulVersion = type_3_desc.ulVersion = SECBUFFER_VERSION; type_2_desc.ulVersion = type_3_desc.ulVersion = SECBUFFER_VERSION;
type_2_desc.cBuffers = type_3_desc.cBuffers = 1; type_2_desc.cBuffers = type_3_desc.cBuffers = 1;
@ -573,7 +585,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
ISC_REQ_CONNECTION, ISC_REQ_CONNECTION,
0, SECURITY_NETWORK_DREP, &type_2_desc, 0, SECURITY_NETWORK_DREP, &type_2_desc,
0, &ntlm->c_handle, &type_3_desc, 0, &ntlm->c_handle, &type_3_desc,
&attrs, NULL); &attrs, &tsDummy);
if (status != SEC_E_OK) if (status != SEC_E_OK)
return CURLE_RECV_ERROR; return CURLE_RECV_ERROR;