mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 03:22:48 -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:
19
plink.c
19
plink.c
@ -160,12 +160,12 @@ struct input_data {
|
||||
HANDLE event, eventback;
|
||||
};
|
||||
|
||||
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) {
|
||||
if (is_pw && password) {
|
||||
static int tried_once = 0;
|
||||
|
||||
if (tried_once) {
|
||||
@ -186,8 +186,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);
|
||||
@ -197,7 +201,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;
|
||||
}
|
||||
@ -265,7 +270,7 @@ int main(int argc, char **argv) {
|
||||
int skcount, sksize;
|
||||
int connopen;
|
||||
|
||||
ssh_get_password = get_password;
|
||||
ssh_get_line = get_line;
|
||||
|
||||
sklist = NULL; skcount = sksize = 0;
|
||||
|
||||
|
Reference in New Issue
Block a user