Module: wine Branch: master Commit: 6720a129f3a77a280e589660828855a06ccdd5e0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6720a129f3a77a280e58966082...
Author: Kai Blin kai.blin@gmail.com Date: Wed Nov 8 12:10:05 2006 +0100
secur32: Delete session key and arc4 context when the session based security context is deleted.
---
dlls/secur32/dispatcher.c | 1 - dlls/secur32/ntlm.c | 32 ++++++++++++++++---------------- dlls/secur32/secur32_priv.h | 1 + 3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/dlls/secur32/dispatcher.c b/dlls/secur32/dispatcher.c index b7b9f9d..c150a14 100644 --- a/dlls/secur32/dispatcher.c +++ b/dlls/secur32/dispatcher.c @@ -258,7 +258,6 @@ void cleanup_helper(PNegoHelper helper) return;
HeapFree(GetProcessHeap(), 0, helper->com_buf); - HeapFree(GetProcessHeap(), 0, helper->session_key);
/* closing stdin will terminate ntlm_auth */ close(helper->pipe_out); diff --git a/dlls/secur32/ntlm.c b/dlls/secur32/ntlm.c index 8cc206d..2b3c02d 100644 --- a/dlls/secur32/ntlm.c +++ b/dlls/secur32/ntlm.c @@ -690,8 +690,7 @@ static SECURITY_STATUS SEC_ENTRY ntlm_In } TRACE("Session key is %s\n", debugstr_a(buffer+3)); helper->valid_session_key = TRUE; - if(!helper->session_key) - helper->session_key = HeapAlloc(GetProcessHeap(), 0, bin_len); + helper->session_key = HeapAlloc(GetProcessHeap(), 0, bin_len); if(!helper->session_key) { TRACE("Failed to allocate memory for session key\n"); @@ -1036,8 +1035,7 @@ static SECURITY_STATUS SEC_ENTRY ntlm_Ac } TRACE("Session key is %s\n", debugstr_a(buffer+3)); helper->valid_session_key = TRUE; - if(!helper->session_key) - helper->session_key = HeapAlloc(GetProcessHeap(), 0, 16); + helper->session_key = HeapAlloc(GetProcessHeap(), 0, 16); if(!helper->session_key) { TRACE("Failed to allocate memory for session key\n"); @@ -1081,20 +1079,22 @@ static SECURITY_STATUS SEC_ENTRY ntlm_Co */ static SECURITY_STATUS SEC_ENTRY ntlm_DeleteSecurityContext(PCtxtHandle phContext) { - SECURITY_STATUS ret; + PNegoHelper helper;
TRACE("%p\n", phContext); - if (phContext) - { - phContext->dwUpper = 0; - phContext->dwLower = 0; - ret = SEC_E_OK; - } - else - { - ret = SEC_E_INVALID_HANDLE; - } - return ret; + if (!phContext) + return SEC_E_INVALID_HANDLE; + + helper = (PNegoHelper)phContext->dwLower; + + phContext->dwUpper = 0; + phContext->dwLower = 0; + + SECUR32_arc4Cleanup(helper->crypt.ntlm.a4i); + HeapFree(GetProcessHeap(), 0, helper->session_key); + helper->valid_session_key = FALSE; + + return SEC_E_OK; }
/*********************************************************************** diff --git a/dlls/secur32/secur32_priv.h b/dlls/secur32/secur32_priv.h index d2002fd..8a6a290 100644 --- a/dlls/secur32/secur32_priv.h +++ b/dlls/secur32/secur32_priv.h @@ -139,6 +139,7 @@ SECURITY_STATUS SECUR32_CreateNTLMv1Sess arc4_info *SECUR32_arc4Alloc(void); void SECUR32_arc4Init(arc4_info *a4i, const BYTE *key, unsigned int keyLen); void SECUR32_arc4Process(arc4_info *a4i, BYTE *inoutString, unsigned int length); +void SECUR32_arc4Cleanup(arc4_info *a4i);
/* NTLMSSP flags indicating the negotiated features */ #define NTLMSSP_NEGOTIATE_UNICODE 0x00000001