diff options
| author | Steve Holme <steve_holme@hotmail.com> | 2014-11-16 12:58:04 +0000 | 
|---|---|---|
| committer | Steve Holme <steve_holme@hotmail.com> | 2014-11-16 13:59:11 +0000 | 
| commit | a3fead9706f2344d934e67cf4cb8ec434bc9a2e6 (patch) | |
| tree | 792371013067f7a0064b856023741f4f0c74d3cb | |
| parent | 201d0df50bb32b1d22539a43d511ebd98d52f575 (diff) | |
ntlm: Moved the SSPI based Type-2 message decoding into the SASL module
| -rw-r--r-- | lib/curl_ntlm_msgs.c | 14 | ||||
| -rw-r--r-- | lib/curl_sasl_sspi.c | 25 | 
2 files changed, 26 insertions, 13 deletions
diff --git a/lib/curl_ntlm_msgs.c b/lib/curl_ntlm_msgs.c index e874f3265..3f4d86bd3 100644 --- a/lib/curl_ntlm_msgs.c +++ b/lib/curl_ntlm_msgs.c @@ -217,8 +217,6 @@ CURLcode Curl_ntlm_decode_type2_target(struct SessionHandle *data,    return CURLE_OK;  } -#endif -  /*    NTLM message structure notes: @@ -256,9 +254,7 @@ CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,                                          const char *header,                                          struct ntlmdata *ntlm)  { -#ifndef USE_WINDOWS_SSPI    static const char type2_marker[] = { 0x02, 0x00, 0x00, 0x00 }; -#endif    /* NTLM type-2 message structure: @@ -280,7 +276,7 @@ CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,    unsigned char *type2 = NULL;    size_t type2_len = 0; -#if defined(CURL_DISABLE_VERBOSE_STRINGS) || defined(USE_WINDOWS_SSPI) +#if defined(CURL_DISABLE_VERBOSE_STRINGS)    (void)data;  #endif @@ -297,10 +293,6 @@ CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,      return CURLE_BAD_CONTENT_ENCODING;    } -#ifdef USE_WINDOWS_SSPI -  ntlm->input_token = type2; -  ntlm->input_token_len = type2_len; -#else    ntlm->flags = 0;    if((type2_len < 32) || @@ -334,12 +326,10 @@ CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,    });    free(type2); -#endif    return result;  } -#ifndef USE_WINDOWS_SSPI  /* copy the source to the destination and fill in zeroes in every     other destination byte! */  static void unicodecpy(unsigned char *dest, const char *src, size_t length) @@ -350,7 +340,6 @@ static void unicodecpy(unsigned char *dest, const char *src, size_t length)      dest[2 * i + 1] = '\0';    }  } -#endif  /*   * Curl_ntlm_create_type1_message() @@ -472,6 +461,7 @@ CURLcode Curl_ntlm_create_type1_message(const char *userp,    /* Return with binary blob encoded into base64 */    return Curl_base64_encode(NULL, (char *)ntlmbuf, size, outptr, outlen);  } +#endif  /*   * Curl_ntlm_create_type3_message() diff --git a/lib/curl_sasl_sspi.c b/lib/curl_sasl_sspi.c index 0665cf295..d54d2ae42 100644 --- a/lib/curl_sasl_sspi.c +++ b/lib/curl_sasl_sspi.c @@ -39,6 +39,7 @@  #include "curl_memory.h"  #include "curl_multibyte.h"  #include "curl_ntlm_msgs.h" +#include "sendf.h"  #include "strdup.h"  #define _MPRINTF_REPLACE /* use our functions only */ @@ -616,7 +617,29 @@ CURLcode Curl_sasl_decode_ntlm_type2_message(struct SessionHandle *data,                                               const char *type2msg,                                               struct ntlmdata *ntlm)  { -  return Curl_ntlm_decode_type2_message(data, type2msg, ntlm); +  CURLcode result = CURLE_OK; +  unsigned char *type2 = NULL; +  size_t type2_len = 0; + +  /* Decode the base-64 encoded type-2 message */ +  if(strlen(type2msg) && *type2msg != '=') { +    result = Curl_base64_decode(type2msg, &type2, &type2_len); +    if(result) +      return result; +  } + +  /* Ensure we have a valid type-2 message */ +  if(!type2) { +    infof(data, "NTLM handshake failure (empty type-2 message)\n"); + +    return CURLE_BAD_CONTENT_ENCODING; +  } + +  /* Simply store the challenge for use later */ +  ntlm->input_token = type2; +  ntlm->input_token_len = type2_len; + +  return result;  }  /*  | 
