Commit 3fe53119 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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

parent 6a48639c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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.
+2 −1
Original line number Diff line number Diff line
@@ -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 Franois, Scott Davis, Ben Madsen
 o John Kelly, Nicolas Franois, Scott Davis, Ben Madsen, Dmitry Bartsevich

        Thanks! (and sorry if I forgot to mention someone)
+18 −6
Original line number Diff line number Diff line
@@ -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,7 +431,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,

    if (AcquireCredentialsHandle(
          NULL, (char *)"NTLM", SECPKG_CRED_OUTBOUND, NULL, ntlm->p_identity,
          NULL, NULL, &ntlm->handle, NULL
          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;