]> granicus.if.org Git - curl/commitdiff
sspi: Only call CompleteAuthToken() when complete is needed
authorSteve Holme <steve_holme@hotmail.com>
Sun, 26 Oct 2014 14:26:39 +0000 (14:26 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 26 Oct 2014 14:33:19 +0000 (14:33 +0000)
Don't call CompleteAuthToken() after InitializeSecurityContext() has
returned SEC_I_CONTINUE_NEEDED as this return code only indicates the
function should be called again after receiving a response back from
the server.

This only affected the Digest and NTLM authentication code.

lib/curl_ntlm_msgs.c
lib/curl_sasl_sspi.c

index 1edefd7a292b1978878a3d84fa25eaa460fdd53c..f0c502d2acd62ac7ed727443c65e441eea7a1b55 100644 (file)
@@ -497,10 +497,10 @@ CURLcode Curl_ntlm_create_type1_message(const char *userp,
                                                ntlm->context, &type_1_desc,
                                                &attrs, &tsDummy);
 
-  if(status == SEC_I_COMPLETE_AND_CONTINUE ||
-     status == SEC_I_CONTINUE_NEEDED)
+  if(status == SEC_I_COMPLETE_NEEDED ||
+     status == SEC_I_COMPLETE_AND_CONTINUE)
     s_pSecFn->CompleteAuthToken(ntlm->context, &type_1_desc);
-  else if(status != SEC_E_OK)
+  else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED)
     return CURLE_RECV_ERROR;
 
   size = type_1_buf.cbBuffer;
index 3875b9bb74ab77cf2c2cd4dfd91cc12a09eed8d3..cdd8b29cf9f7d11390f358ff0a8d4e4aea43f251 100644 (file)
@@ -232,10 +232,10 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
                                                &chlg_desc, 0, &ctx,
                                                &resp_desc, &attrs, &tsDummy);
 
-  if(status == SEC_I_COMPLETE_AND_CONTINUE ||
-     status == SEC_I_CONTINUE_NEEDED)
+  if(status == SEC_I_COMPLETE_NEEDED ||
+     status == SEC_I_COMPLETE_AND_CONTINUE)
     s_pSecFn->CompleteAuthToken(&handle, &resp_desc);
-  else if(status != SEC_E_OK) {
+  else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
     s_pSecFn->FreeCredentialsHandle(&handle);
     Curl_sspi_free_identity(&identity);
     Curl_safefree(spn);