X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e0233d70fb7bfac996b3514ae60d7eedef0e6ad3..2b60a54adb3b0bf5a9b927708085492b816a6015:/sbr/getpass.c diff --git a/sbr/getpass.c b/sbr/getpass.c index b33a3f8e..4b24af3c 100644 --- a/sbr/getpass.c +++ b/sbr/getpass.c @@ -1,4 +1,5 @@ -/* +/* getpass.c -- read a password without echo. + * * Portions of this code are Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. * @@ -29,18 +30,14 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $Id$ */ -#include +#include #include -#include /* for ttyname() */ -#include "h/mh.h" /* for adios() */ /* We don't use MAX_PASS here because the maximum password length on a remote POP daemon will have nothing to do with the length on our OS. 256 is - arbitrary but hopefully big enough to accomodate everyone. */ + arbitrary but hopefully big enough to accommodate everyone. */ #define MAX_PASSWORD_LEN 256 #ifndef TCSANOW @@ -52,21 +49,21 @@ nmh_getpass(const char *prompt) { struct termios oterm, term; int ch; - char *p, *ttystring; + char *p; FILE *fout, *fin; static char buf[MAX_PASSWORD_LEN + 1]; + int istty = isatty(fileno(stdin)); /* Find if stdin is connect to a terminal. If so, read directly from * the terminal, and turn off echo. Otherwise read from stdin. */ - if((ttystring = (char *)ttyname(fileno(stdin))) == NULL) { + if (!istty || !(fout = fin = fopen("/dev/tty", "w+"))) { fout = stderr; fin = stdin; } else /* Reading directly from terminal here */ { - fout = fin = fopen(ttystring, "w+"); (void)tcgetattr(fileno(fin), &oterm); term = oterm; /* Save original info */ term.c_lflag &= ~ECHO; @@ -81,7 +78,7 @@ nmh_getpass(const char *prompt) *p++ = ch; *p = '\0'; - if(ttystring != NULL) { + if (istty) { (void)tcsetattr(fileno(fin), TCSANOW, &oterm); rewind(fout); (void)fputc('\n', fout);