diff options
Diffstat (limited to 'lib/http_negotiate_sspi.c')
-rw-r--r-- | lib/http_negotiate_sspi.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/http_negotiate_sspi.c b/lib/http_negotiate_sspi.c index f1ab33d6d..ac197f6cf 100644 --- a/lib/http_negotiate_sspi.c +++ b/lib/http_negotiate_sspi.c @@ -33,6 +33,7 @@ #include "curl_base64.h" #include "http_negotiate.h" #include "curl_memory.h" +#include "curl_multibyte.h" #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> @@ -90,7 +91,7 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy, SecBuffer in_sec_buff; ULONG context_attributes; TimeStamp lifetime; - + LPTSTR sname; int ret; size_t len = 0, input_token_len = 0; bool gss = FALSE; @@ -137,7 +138,7 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy, if(!neg_ctx->output_token) { PSecPkgInfo SecurityPackage; - ret = s_pSecFn->QuerySecurityPackageInfo((SEC_CHAR *)"Negotiate", + ret = s_pSecFn->QuerySecurityPackageInfo(TEXT("Negotiate"), &SecurityPackage); if(ret != SEC_E_OK) return -1; @@ -166,7 +167,7 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy, return -1; neg_ctx->status = - s_pSecFn->AcquireCredentialsHandle(NULL, (SEC_CHAR *)"Negotiate", + s_pSecFn->AcquireCredentialsHandle(NULL, TEXT("Negotiate"), SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, neg_ctx->credentials, &lifetime); @@ -205,10 +206,18 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy, in_sec_buff.pvBuffer = input_token; } +#ifdef UNICODE + sname = Curl_convert_UTF8_to_wchar(neg_ctx->server_name); + if(!wserver) + return CURLE_OUT_OF_MEMORY; +#else + sname = neg_ctx->server_name; +#endif + neg_ctx->status = s_pSecFn->InitializeSecurityContext( neg_ctx->credentials, input_token ? neg_ctx->context : 0, - neg_ctx->server_name, + sname, ISC_REQ_CONFIDENTIALITY, 0, SECURITY_NATIVE_DREP, @@ -219,6 +228,10 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy, &context_attributes, &lifetime); +#ifdef UNICODE + free(sname); +#endif + if(GSS_ERROR(neg_ctx->status)) return -1; |