]> git.pond.sub.org Git - empserver/commitdiff
Make Windows client read password without echo again
authorMarkus Armbruster <armbru@pond.sub.org>
Thu, 23 Apr 2009 18:38:15 +0000 (20:38 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 23 Apr 2009 18:38:15 +0000 (20:38 +0200)
Commit 8c3b8d10 replaced the getpass() for Windows by a generic
ersatz_getpass().  This lost the "switch off echo" feature, with the
excuse that it doesn't work for me (MinGW & Wine).  Turns out it works
under real Windows.  Restore the feature.

src/client/login.c

index 350e64498f43bbc767116c83f7a2c412b687ae01..13eaf5e97808164df4ded906797659e06790aa39 100644 (file)
@@ -52,11 +52,22 @@ ersatz_getpass(char *prompt)
     static char buf[128];
     char *p;
     size_t len;
+#ifdef _WIN32
+    DWORD mode;
+    HANDLE input_handle = GetStdHandle(STD_INPUT_HANDLE);
 
-    printf("Note: your input is echoed to the screen\n");
+    if (GetConsoleMode(input_handle, &mode))
+       SetConsoleMode(input_handle, mode & ~ENABLE_ECHO_INPUT);
+    else
+#endif
+       printf("Note: your input is echoed to the screen\n");
     printf("Your name? ");
     fflush(stdout);
     p = fgets(buf, sizeof(buf), stdin);
+#ifdef _WIN32
+    if (GetConsoleMode(input_handle, &mode))
+       SetConsoleMode(input_handle, mode | ENABLE_ECHO_INPUT);
+#endif
     if (!p)
        return NULL;
     len = strlen(p);