[PATCH] wpa_passphrase: Disable terminal echo when reading from stdin

Abhiram V abhi.raa.man.v at gmail.com
Mon Nov 21 08:30:27 PST 2022


Disable terminal echo using tcgetattr() and tcsetattr() when reading
passphrase from stdin.

Signed-off-by: Abhiram V <abhi.raa.man.v at gmail.com>
---
 wpa_supplicant/wpa_passphrase.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/wpa_supplicant/wpa_passphrase.c b/wpa_supplicant/wpa_passphrase.c
index d9c07e673..4f185da5b 100644
--- a/wpa_supplicant/wpa_passphrase.c
+++ b/wpa_supplicant/wpa_passphrase.c
@@ -10,10 +10,12 @@
 
 #include "common.h"
 #include "crypto/sha1.h"
+#include <termios.h>
 
 
 int main(int argc, char *argv[])
 {
+	struct termios term;
 	unsigned char psk[32];
 	int i;
 	char *ssid, *passphrase, buf[64], *pos;
@@ -32,10 +34,24 @@ int main(int argc, char *argv[])
 		passphrase = argv[2];
 	} else {
 		fprintf(stderr, "# reading passphrase from stdin\n");
+		if (tcgetattr(STDIN_FILENO, &term) < 0) {
+			perror("tcgetattr");
+			return 1;
+		}
+		term.c_lflag &= ~ECHO;
+		if (tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) {
+			perror("tcsetattr:error disabling echo");
+			return 1;
+		}
 		if (fgets(buf, sizeof(buf), stdin) == NULL) {
 			fprintf(stderr, "Failed to read passphrase\n");
 			return 1;
 		}
+		term.c_cflag |= ECHO;
+		if (tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) {
+			perror("tcsetattr:error enabling echo");
+			return 1;
+		}
 		buf[sizeof(buf) - 1] = '\0';
 		pos = buf;
 		while (*pos != '\0') {
-- 
2.38.1




More information about the Hostap mailing list