Module: wine Branch: master Commit: 1ca4fc094365d7d1502c31dbed9a5ba0d9620189 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ca4fc094365d7d1502c31dbed...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Jul 13 10:30:55 2016 +0200
credui: Use the input identity passed to SspiPromptForCredentialsW.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/credui/credui_main.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/credui/credui_main.c b/dlls/credui/credui_main.c index c63983e..b85129a 100644 --- a/dlls/credui/credui_main.c +++ b/dlls/credui/credui_main.c @@ -871,6 +871,7 @@ ULONG SEC_ENTRY SspiPromptForCredentialsW( PCWSTR target, void *info, DWORD len_password = sizeof(password) / sizeof(password[0]); DWORD ret, flags; CREDUI_INFOW *cred_info = info; + SEC_WINNT_AUTH_IDENTITY_W *id = input_id;
FIXME( "(%s, %p, %u, %s, %p, %p, %p, %x) stub\n", debugstr_w(target), info, error, debugstr_w(package), input_id, output_id, save, sspi_flags ); @@ -882,11 +883,6 @@ ULONG SEC_ENTRY SspiPromptForCredentialsW( PCWSTR target, void *info, FIXME( "package %s not supported\n", debugstr_w(package) ); return ERROR_NO_SUCH_PACKAGE; } - if (input_id) - { - FIXME( "input identity not supported\n" ); - return ERROR_CALL_NOT_IMPLEMENTED; - }
flags = CREDUI_FLAGS_ALWAYS_SHOW_UI | CREDUI_FLAGS_GENERIC_CREDENTIALS;
@@ -896,12 +892,24 @@ ULONG SEC_ENTRY SspiPromptForCredentialsW( PCWSTR target, void *info, if (!(sspi_flags & SSPIPFC_NO_CHECKBOX)) flags |= CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX;
- find_existing_credential( target, username, len_username, password, len_password ); + if (!id) find_existing_credential( target, username, len_username, password, len_password ); + else + { + if (id->User && id->UserLength > 0 && id->UserLength <= CREDUI_MAX_USERNAME_LENGTH) + { + memcpy( username, id->User, id->UserLength * sizeof(WCHAR) ); + username[id->UserLength] = 0; + } + if (id->Password && id->PasswordLength > 0 && id->PasswordLength <= CREDUI_MAX_PASSWORD_LENGTH) + { + memcpy( password, id->Password, id->PasswordLength * sizeof(WCHAR) ); + password[id->PasswordLength] = 0; + } + }
if (!(ret = CredUIPromptForCredentialsW( cred_info, target, NULL, error, username, len_username, password, len_password, save, flags ))) { - SEC_WINNT_AUTH_IDENTITY_W *id; DWORD size = sizeof(*id); WCHAR *ptr;