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.
This commit is contained in:
parent
05e9a1fce8
commit
50fef74131
|
@ -503,6 +503,20 @@ static inline BOOL is_basic_auth_value( LPCWSTR pszAuthValue )
|
||||||
((pszAuthValue[ARRAYSIZE(szBasic)] == ' ') || !pszAuthValue[ARRAYSIZE(szBasic)]);
|
((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,
|
static BOOL HTTP_DoAuthorization( http_request_t *lpwhr, LPCWSTR pszAuthValue,
|
||||||
struct HttpAuthInfo **ppAuthInfo,
|
struct HttpAuthInfo **ppAuthInfo,
|
||||||
LPWSTR domain_and_username, LPWSTR password )
|
LPWSTR domain_and_username, LPWSTR password )
|
||||||
|
@ -706,8 +720,9 @@ static BOOL HTTP_DoAuthorization( http_request_t *lpwhr, LPCWSTR pszAuthValue,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ERR("InitializeSecurityContextW returned error 0x%08x\n", sec_status);
|
ERR("InitializeSecurityContextW returned error 0x%08x\n", sec_status);
|
||||||
pAuthInfo->finished = TRUE;
|
|
||||||
HeapFree(GetProcessHeap(), 0, out.pvBuffer);
|
HeapFree(GetProcessHeap(), 0, out.pvBuffer);
|
||||||
|
destroy_authinfo(pAuthInfo);
|
||||||
|
*ppAuthInfo = NULL;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1507,31 +1522,8 @@ static void HTTPREQ_Destroy(object_header_t *hdr)
|
||||||
DeleteCriticalSection( &lpwhr->read_section );
|
DeleteCriticalSection( &lpwhr->read_section );
|
||||||
WININET_Release(&lpwhr->lpHttpSession->hdr);
|
WININET_Release(&lpwhr->lpHttpSession->hdr);
|
||||||
|
|
||||||
if (lpwhr->pAuthInfo)
|
destroy_authinfo(lpwhr->pAuthInfo);
|
||||||
{
|
destroy_authinfo(lpwhr->pProxyAuthInfo);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath);
|
HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath);
|
||||||
HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb);
|
HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb);
|
||||||
|
|
Loading…
Reference in New Issue