--- a/wpa_supplicant/wpa_passphrase.c 2024-08-21 19:30:03.753508749 -0400 +++ b/wpa_supplicant/wpa_passphrase.c 2024-08-21 19:38:01.389508464 -0400 @@ -33,27 +33,34 @@ if (argc > 2) { passphrase = argv[2]; } else { - bool ctrl_echo; + bool ctrl_echo = false; fprintf(stderr, "# reading passphrase from stdin\n"); - if (tcgetattr(STDIN_FILENO, &term) < 0) { - perror("tcgetattr"); - return 1; - } - ctrl_echo = term.c_lflag & ECHO; - term.c_lflag &= ~ECHO; - if (ctrl_echo && tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) { - perror("tcsetattr:error disabling echo"); - return 1; + + if ( isatty (STDIN_FILENO)) { + if (tcgetattr(STDIN_FILENO, &term) < 0) { + perror("tcgetattr"); + return 1; + } + ctrl_echo = term.c_lflag & ECHO; + term.c_lflag &= ~ECHO; + if (ctrl_echo && 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_lflag |= ECHO; - if (ctrl_echo && tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) { - perror("tcsetattr:error enabling echo"); - return 1; + + if (ctrl_echo) { + term.c_lflag |= ECHO; + if (tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) { + perror("tcsetattr:error enabling echo"); + return 1; + } } buf[sizeof(buf) - 1] = '\0'; pos = buf;