1
0
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:
Simon Tatham
2001-03-12 15:31:53 +00:00
parent 9ee21069b5
commit 55659a959f
5 changed files with 148 additions and 105 deletions

19
plink.c
View File

@ -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;