ssh_get_password has become ssh_get_line, so it can handle usernames
[u/mdw/putty] / plink.c
diff --git a/plink.c b/plink.c
index 5efcd45..121c65f 100644 (file)
--- a/plink.c
+++ b/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;