ssh_get_password has become ssh_get_line, so it can handle usernames
[u/mdw/putty] / psftp.c
diff --git a/psftp.c b/psftp.c
index 0cf01be..1e89575 100644 (file)
--- a/psftp.c
+++ b/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();