credui: Don't show a dialog if existing credentials can be found.
This commit is contained in:
parent
d6f8687630
commit
9d95d33118
|
@ -548,6 +548,38 @@ static INT_PTR CALLBACK CredDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,
|
|||
}
|
||||
}
|
||||
|
||||
static BOOL find_existing_credential(const WCHAR *target, WCHAR *username, ULONG len_username,
|
||||
WCHAR *password, ULONG len_password)
|
||||
{
|
||||
DWORD count, i;
|
||||
CREDENTIALW **credentials;
|
||||
|
||||
if (!CredEnumerateW(target, 0, &count, &credentials)) return FALSE;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (credentials[i]->Type != CRED_TYPE_DOMAIN_PASSWORD)
|
||||
{
|
||||
FIXME("no support for type %u credentials\n", credentials[i]->Type);
|
||||
continue;
|
||||
}
|
||||
if ((!*username || !strcmpW(username, credentials[i]->UserName)) &&
|
||||
strlenW(credentials[i]->UserName) < len_username &&
|
||||
credentials[i]->CredentialBlobSize / sizeof(WCHAR) < len_password)
|
||||
{
|
||||
TRACE("found existing credential for %s\n", debugstr_w(credentials[i]->UserName));
|
||||
|
||||
strcpyW(username, credentials[i]->UserName);
|
||||
memcpy(password, credentials[i]->CredentialBlob, credentials[i]->CredentialBlobSize);
|
||||
password[credentials[i]->CredentialBlobSize / sizeof(WCHAR)] = 0;
|
||||
|
||||
CredFree(credentials);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
CredFree(credentials);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* CredUIPromptForCredentialsW [CREDUI.@]
|
||||
*/
|
||||
|
@ -578,6 +610,11 @@ DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW pUIInfo,
|
|||
if ((dwFlags & CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX) && !pfSave)
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
if (!(dwFlags & CREDUI_FLAGS_ALWAYS_SHOW_UI) &&
|
||||
!(dwFlags & CREDUI_FLAGS_INCORRECT_PASSWORD) &&
|
||||
find_existing_credential(pszTargetName, pszUsername, ulUsernameMaxChars, pszPassword, ulPasswordMaxChars))
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
params.pszTargetName = pszTargetName;
|
||||
if (pUIInfo)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue