1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

ntlm: Moved SSPI clean-up code into SASL module

This commit is contained in:
Steve Holme 2014-10-09 11:03:14 +01:00
parent 79931c5aeb
commit 474442dd56
6 changed files with 52 additions and 43 deletions

View File

@ -39,6 +39,7 @@
#include "curl_ntlm.h" #include "curl_ntlm.h"
#include "curl_ntlm_msgs.h" #include "curl_ntlm_msgs.h"
#include "curl_ntlm_wb.h" #include "curl_ntlm_wb.h"
#include "curl_sasl.h"
#include "url.h" #include "url.h"
#include "curl_memory.h" #include "curl_memory.h"
@ -229,8 +230,8 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
void Curl_http_ntlm_cleanup(struct connectdata *conn) void Curl_http_ntlm_cleanup(struct connectdata *conn)
{ {
#ifdef USE_WINDOWS_SSPI #ifdef USE_WINDOWS_SSPI
Curl_ntlm_sspi_cleanup(&conn->ntlm); Curl_sasl_ntlm_cleanup(&conn->ntlm);
Curl_ntlm_sspi_cleanup(&conn->proxyntlm); Curl_sasl_ntlm_cleanup(&conn->proxyntlm);
#elif defined(NTLM_WB_ENABLED) #elif defined(NTLM_WB_ENABLED)
Curl_ntlm_wb_cleanup(conn); Curl_ntlm_wb_cleanup(conn);
#else #else

View File

@ -51,6 +51,7 @@
#define BUILDING_CURL_NTLM_MSGS_C #define BUILDING_CURL_NTLM_MSGS_C
#include "curl_ntlm_msgs.h" #include "curl_ntlm_msgs.h"
#include "curl_sasl.h"
#define _MPRINTF_REPLACE /* use our functions only */ #define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h> #include <curl/mprintf.h>
@ -338,36 +339,6 @@ CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,
return CURLE_OK; return CURLE_OK;
} }
#ifdef USE_WINDOWS_SSPI
void Curl_ntlm_sspi_cleanup(struct ntlmdata *ntlm)
{
/* Free our security context */
if(ntlm->context) {
s_pSecFn->DeleteSecurityContext(ntlm->context);
free(ntlm->context);
ntlm->context = NULL;
}
/* Free our credentials handle */
if(ntlm->credentials) {
s_pSecFn->FreeCredentialsHandle(ntlm->credentials);
free(ntlm->credentials);
ntlm->credentials = NULL;
}
/* Free our identity */
Curl_sspi_free_identity(ntlm->p_identity);
ntlm->p_identity = NULL;
/* Free the input and output tokens */
Curl_safefree(ntlm->input_token);
Curl_safefree(ntlm->output_token);
/* Reset any variables */
ntlm->token_max = 0;
}
#endif
#ifndef USE_WINDOWS_SSPI #ifndef USE_WINDOWS_SSPI
/* copy the source to the destination and fill in zeroes in every /* copy the source to the destination and fill in zeroes in every
other destination byte! */ other destination byte! */
@ -430,7 +401,7 @@ CURLcode Curl_ntlm_create_type1_message(const char *userp,
unsigned long attrs; unsigned long attrs;
TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */ TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */
Curl_ntlm_sspi_cleanup(ntlm); Curl_sasl_ntlm_cleanup(ntlm);
/* Query the security package for NTLM */ /* Query the security package for NTLM */
status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM), status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM),
@ -695,7 +666,7 @@ CURLcode Curl_ntlm_create_type3_message(struct SessionHandle *data,
result = Curl_base64_encode(NULL, (char *)ntlm->output_token, size, result = Curl_base64_encode(NULL, (char *)ntlm->output_token, size,
outptr, outlen); outptr, outlen);
Curl_ntlm_sspi_cleanup(ntlm); Curl_sasl_ntlm_cleanup(ntlm);
return result; return result;

View File

@ -52,14 +52,6 @@ CURLcode Curl_ntlm_decode_type2_target(struct SessionHandle *data,
size_t size, size_t size,
struct ntlmdata* ntlm); struct ntlmdata* ntlm);
/* This is to clean up the ntlm data structure */
#ifdef USE_WINDOWS_SSPI
void Curl_ntlm_sspi_cleanup(struct ntlmdata *ntlm);
#else
#define Curl_ntlm_sspi_cleanup(x)
#endif
/* NTLM buffer fixed size, large enough for long user + host + domain */ /* NTLM buffer fixed size, large enough for long user + host + domain */
#define NTLM_BUFSIZE 1024 #define NTLM_BUFSIZE 1024

View File

@ -1243,7 +1243,7 @@ void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
#ifdef USE_NTLM #ifdef USE_NTLM
/* Cleanup the ntlm structure */ /* Cleanup the ntlm structure */
else if(authused == SASL_MECH_NTLM) { else if(authused == SASL_MECH_NTLM) {
Curl_ntlm_sspi_cleanup(&conn->ntlm); Curl_sasl_ntlm_cleanup(&conn->ntlm);
} }
#endif #endif
#else #else

View File

@ -149,6 +149,11 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
struct ntlmdata *ntlm, struct ntlmdata *ntlm,
char **outptr, size_t *outlen); char **outptr, size_t *outlen);
#if defined(USE_WINDOWS_SSPI)
/* This is used to clean up the ntlm specific data */
void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm);
#endif
#endif /* USE_NTLM */ #endif /* USE_NTLM */
#if defined(USE_KRB5) #if defined(USE_KRB5)

View File

@ -485,6 +485,46 @@ void Curl_sasl_digest_cleanup(struct digestdata *digest)
} }
#endif /* !CURL_DISABLE_CRYPTO_AUTH */ #endif /* !CURL_DISABLE_CRYPTO_AUTH */
#if defined USE_NTLM
/*
* Curl_sasl_ntlm_cleanup()
*
* This is used to clean up the ntlm specific data.
*
* Parameters:
*
* ntlm [in/out] - The ntlm data struct being cleaned up.
*
*/
void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
{
/* Free our security context */
if(ntlm->context) {
s_pSecFn->DeleteSecurityContext(ntlm->context);
free(ntlm->context);
ntlm->context = NULL;
}
/* Free our credentials handle */
if(ntlm->credentials) {
s_pSecFn->FreeCredentialsHandle(ntlm->credentials);
free(ntlm->credentials);
ntlm->credentials = NULL;
}
/* Free our identity */
Curl_sspi_free_identity(ntlm->p_identity);
ntlm->p_identity = NULL;
/* Free the input and output tokens */
Curl_safefree(ntlm->input_token);
Curl_safefree(ntlm->output_token);
/* Reset any variables */
ntlm->token_max = 0;
}
#endif /* USE_NTLM */
#if defined(USE_KRB5) #if defined(USE_KRB5)
/* /*
* Curl_sasl_create_gssapi_user_message() * Curl_sasl_create_gssapi_user_message()