Module: wine Branch: master Commit: 50fef74131352520e8e09efd34fafee61cd02ede URL: http://source.winehq.org/git/wine.git/?a=commit;h=50fef74131352520e8e09efd34...
Author: Hans Leidekker hans@meelstraat.net Date: Wed Sep 2 11:44:43 2009 +0200
wininet: Destroy authorization info on failure in HTTP_DoAuthorization.
This makes sure the app can retry authorization, e.g. when username and password are not supplied upfront and there are no cached credentials.
---
dlls/wininet/http.c | 44 ++++++++++++++++++-------------------------- 1 files changed, 18 insertions(+), 26 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 681658e..e94e5cc 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -503,6 +503,20 @@ static inline BOOL is_basic_auth_value( LPCWSTR pszAuthValue ) ((pszAuthValue[ARRAYSIZE(szBasic)] == ' ') || !pszAuthValue[ARRAYSIZE(szBasic)]); }
+static void destroy_authinfo( struct HttpAuthInfo *authinfo ) +{ + if (!authinfo) return; + + if (SecIsValidHandle(&authinfo->ctx)) + DeleteSecurityContext(&authinfo->ctx); + if (SecIsValidHandle(&authinfo->cred)) + FreeCredentialsHandle(&authinfo->cred); + + HeapFree(GetProcessHeap(), 0, authinfo->auth_data); + HeapFree(GetProcessHeap(), 0, authinfo->scheme); + HeapFree(GetProcessHeap(), 0, authinfo); +} + static BOOL HTTP_DoAuthorization( http_request_t *lpwhr, LPCWSTR pszAuthValue, struct HttpAuthInfo **ppAuthInfo, LPWSTR domain_and_username, LPWSTR password ) @@ -706,8 +720,9 @@ static BOOL HTTP_DoAuthorization( http_request_t *lpwhr, LPCWSTR pszAuthValue, else { ERR("InitializeSecurityContextW returned error 0x%08x\n", sec_status); - pAuthInfo->finished = TRUE; HeapFree(GetProcessHeap(), 0, out.pvBuffer); + destroy_authinfo(pAuthInfo); + *ppAuthInfo = NULL; return FALSE; } } @@ -1507,31 +1522,8 @@ static void HTTPREQ_Destroy(object_header_t *hdr) DeleteCriticalSection( &lpwhr->read_section ); WININET_Release(&lpwhr->lpHttpSession->hdr);
- if (lpwhr->pAuthInfo) - { - if (SecIsValidHandle(&lpwhr->pAuthInfo->ctx)) - DeleteSecurityContext(&lpwhr->pAuthInfo->ctx); - if (SecIsValidHandle(&lpwhr->pAuthInfo->cred)) - FreeCredentialsHandle(&lpwhr->pAuthInfo->cred); - - HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo->auth_data); - HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo->scheme); - HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo); - lpwhr->pAuthInfo = NULL; - } - - if (lpwhr->pProxyAuthInfo) - { - if (SecIsValidHandle(&lpwhr->pProxyAuthInfo->ctx)) - DeleteSecurityContext(&lpwhr->pProxyAuthInfo->ctx); - if (SecIsValidHandle(&lpwhr->pProxyAuthInfo->cred)) - FreeCredentialsHandle(&lpwhr->pProxyAuthInfo->cred); - - HeapFree(GetProcessHeap(), 0, lpwhr->pProxyAuthInfo->auth_data); - HeapFree(GetProcessHeap(), 0, lpwhr->pProxyAuthInfo->scheme); - HeapFree(GetProcessHeap(), 0, lpwhr->pProxyAuthInfo); - lpwhr->pProxyAuthInfo = NULL; - } + destroy_authinfo(lpwhr->pAuthInfo); + destroy_authinfo(lpwhr->pProxyAuthInfo);
HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath); HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb);