]> granicus.if.org Git - curl/commitdiff
Dmitry Bartsevich made the SSPI support work on Windows 9x as well
authorDaniel Stenberg <daniel@haxx.se>
Mon, 19 Sep 2005 21:45:16 +0000 (21:45 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 19 Sep 2005 21:45:16 +0000 (21:45 +0000)
CHANGES
RELEASE-NOTES
lib/http_ntlm.c

diff --git a/CHANGES b/CHANGES
index 1cea515effc8eff745c75aea2549f29799ec7e4f..40b2ae8a0f73e3adfb0523de7e14893f2db2e192 100644 (file)
--- 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.
index caa814ba70dfcbba3399602c6b488b5b8f5f22df..c55bed74b7ed89a9202bc78eb8213dd7cca9e7fe 100644 (file)
@@ -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)
index 835acdeb822019d104fcaa15ac985369e961f94f..e6935e65fc26c5fffcd0b5320ad83c8218f194b5 100644 (file)
@@ -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;