diff --git a/CHANGES b/CHANGES index 1cea515ef..40b2ae8a0 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,9 @@ Changelog +Daniel (19 September 2005) +- Dmitry Bartsevich made the SSPI support work on Windows 9x as well. + Daniel (15 September 2005) - Added a TFTP server to the test suite and made the test suite capable of using it. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index caa814ba7..c55bed74b 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -16,6 +16,7 @@ This release includes the following changes: This release includes the following bugfixes: + o SSPI works even for Windows 9x o crash in --dump-header on FTP 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 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) diff --git a/lib/http_ntlm.c b/lib/http_ntlm.c index 835acdeb8..e6935e65f 100644 --- a/lib/http_ntlm.c +++ b/lib/http_ntlm.c @@ -387,6 +387,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, ULONG attrs; const char *user; int domlen; + TimeStamp tsDummy; /* For Windows 9x compatibility of SPPI calls */ ntlm_sspi_cleanup(ntlm); @@ -430,8 +431,8 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, if (AcquireCredentialsHandle( NULL, (char *)"NTLM", SECPKG_CRED_OUTBOUND, NULL, ntlm->p_identity, - NULL, NULL, &ntlm->handle, NULL - ) != SEC_E_OK) { + NULL, NULL, &ntlm->handle, &tsDummy + ) != SEC_E_OK) { return CURLE_OUT_OF_MEMORY; } @@ -447,12 +448,22 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION, 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 || 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) { FreeCredentialsHandle(&ntlm->handle); @@ -553,6 +564,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, SecBufferDesc type_2_desc, type_3_desc; SECURITY_STATUS status; ULONG attrs; + TimeStamp tsDummy; /* For Windows 9x compatibility of SPPI calls */ type_2_desc.ulVersion = type_3_desc.ulVersion = SECBUFFER_VERSION; type_2_desc.cBuffers = type_3_desc.cBuffers = 1; @@ -573,7 +585,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, ISC_REQ_CONNECTION, 0, SECURITY_NETWORK_DREP, &type_2_desc, 0, &ntlm->c_handle, &type_3_desc, - &attrs, NULL); + &attrs, &tsDummy); if (status != SEC_E_OK) return CURLE_RECV_ERROR;