]> git.pond.sub.org Git - empserver/commitdiff
client: Make get_password() not echo with POSIX && !HAVE_GETPASS
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 27 Dec 2020 10:48:52 +0000 (11:48 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 23 Jan 2021 06:08:03 +0000 (07:08 +0100)
getpass() is traditional Unix, but has been withdrawn from POSIX.  We
provide a replacement in case it's missing.  The one for Windows
suppresses echo, like getpass() does.  Implement that for POSIX.  The
other differences to getpass() remain.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
src/client/getpass.c

index 6e151f41e023551d748cbeb7ccb13df7862f41d5..b04ec7e504cf66b6e3b81de123e162347bc8d46f 100644 (file)
@@ -38,6 +38,8 @@
 #include <string.h>
 #ifdef _WIN32
 #include <windows.h>
+#else
+#include <termios.h>
 #endif
 #endif
 #include "misc.h"
@@ -62,7 +64,19 @@ set_echo_if_tty(int on)
        return -1;
     return 1;
 #else
-    return 0;
+    struct termios tcattr;
+
+    if (tcgetattr(0, &tcattr) < 0)
+       return 0;
+
+    if (on)
+       tcattr.c_lflag |= ECHO;
+    else
+       tcattr.c_lflag &= ~ECHO;
+
+    if (tcsetattr(0, TCSAFLUSH, &tcattr) < 0)
+       return -1;
+    return 1;
 #endif
 }
 #endif /* !HAVE_GETPASS */