Hans Leidekker : wininet: Destroy authorization info on failure in HTTP_DoAuthorization.
Alexandre Julliard
julliard at winehq.org
Wed Sep 2 09:31:14 CDT 2009
Module: wine
Branch: master
Commit: 50fef74131352520e8e09efd34fafee61cd02ede
URL: http://source.winehq.org/git/wine.git/?a=commit;h=50fef74131352520e8e09efd34fafee61cd02ede
Author: Hans Leidekker <hans at 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);
More information about the wine-cvs
mailing list