mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 12:02:47 -05:00
ssh_get_password has become ssh_get_line, so it can handle usernames
as well. This should fix the multiple-reads-on-stdin bug in plink. [originally from svn r994]
This commit is contained in:
17
psftp.c
17
psftp.c
@ -860,10 +860,10 @@ static void ssh_sftp_init(void) {
|
||||
}
|
||||
|
||||
static char *password = NULL;
|
||||
static int get_password(const char *prompt, char *str, int maxlen)
|
||||
static int get_line(const char *prompt, char *str, int maxlen, int is_pw)
|
||||
{
|
||||
HANDLE hin, hout;
|
||||
DWORD savemode, i;
|
||||
DWORD savemode, newmode, i;
|
||||
|
||||
if (password) {
|
||||
static int tried_once = 0;
|
||||
@ -886,8 +886,12 @@ static int get_password(const char *prompt, char *str, int maxlen)
|
||||
}
|
||||
|
||||
GetConsoleMode(hin, &savemode);
|
||||
SetConsoleMode(hin, (savemode & (~ENABLE_ECHO_INPUT)) |
|
||||
ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT);
|
||||
newmode = savemode | ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT;
|
||||
if (is_pw)
|
||||
newmode &= ~ENABLE_ECHO_INPUT;
|
||||
else
|
||||
newmode |= ENABLE_ECHO_INPUT;
|
||||
SetConsoleMode(hin, newmode);
|
||||
|
||||
WriteFile(hout, prompt, strlen(prompt), &i, NULL);
|
||||
ReadFile(hin, str, maxlen-1, &i, NULL);
|
||||
@ -897,7 +901,8 @@ static int get_password(const char *prompt, char *str, int maxlen)
|
||||
if ((int)i > maxlen) i = maxlen-1; else i = i - 2;
|
||||
str[i] = '\0';
|
||||
|
||||
WriteFile(hout, "\r\n", 2, &i, NULL);
|
||||
if (is_pw)
|
||||
WriteFile(hout, "\r\n", 2, &i, NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -948,7 +953,7 @@ int main(int argc, char *argv[])
|
||||
char *err;
|
||||
|
||||
flags = FLAG_STDERR;
|
||||
ssh_get_password = &get_password;
|
||||
ssh_get_line = &get_line;
|
||||
init_winsock();
|
||||
sk_init();
|
||||
|
||||
|
Reference in New Issue
Block a user