From 03d34b683d79dd42463fd26d5f0dd1d7cc192036 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Thu, 7 Aug 2014 20:07:46 +0100 Subject: [PATCH] ntlm: Added support for SSPI package info query Just as with the SSPI implementations of Digest and Negotiate added a package info query so that libcurl can a) return a more appropriate error code when the NTLM package is not supported and b) it can be of use later to allocate a dynamic buffer for the Type-1 and Type-3 output tokens rather than use a fixed buffer of 1024 bytes. --- lib/curl_ntlm_msgs.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/curl_ntlm_msgs.c b/lib/curl_ntlm_msgs.c index 42bab2e59..8d33e9d0b 100644 --- a/lib/curl_ntlm_msgs.c +++ b/lib/curl_ntlm_msgs.c @@ -414,6 +414,7 @@ CURLcode Curl_ntlm_create_type1_message(const char *userp, #ifdef USE_WINDOWS_SSPI + PSecPkgInfo SecurityPackage; SecBuffer type_1_buf; SecBufferDesc type_1_desc; SECURITY_STATUS status; @@ -422,6 +423,15 @@ CURLcode Curl_ntlm_create_type1_message(const char *userp, Curl_ntlm_sspi_cleanup(ntlm); + /* Query the security package for NTLM */ + status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT("NTLM"), + &SecurityPackage); + if(status != SEC_E_OK) + return CURLE_NOT_BUILT_IN; + + /* Release the package buffer as it is not required anymore */ + s_pSecFn->FreeContextBuffer(SecurityPackage); + if(userp && *userp) { CURLcode result;