From: Todd C. Miller Date: Mon, 15 Feb 1993 19:19:45 +0000 (+0000) Subject: now works on sgi's X-Git-Tag: SUDO_1_3_0~125 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=31f6f67f0cd60930ddac29efff9e26423546f6f9;p=sudo now works on sgi's --- diff --git a/getpass.c b/getpass.c index 839d45469..1d44ad909 100644 --- a/getpass.c +++ b/getpass.c @@ -22,9 +22,6 @@ static char sccsid[] = "@(#)getpass.c based on 5.3 (Berkeley) 9/22/88"; #include #include -#ifdef sgi -#include -#endif #include #include #include @@ -33,13 +30,21 @@ char * getpass(prompt) char *prompt; { +#if defined(sgi) + struct termio ttyb; +#else struct sgttyb ttyb; +#endif register int ch; register char *p; FILE *fp, *outfp; long omask; int fd_tmp; +#if defined(sgi) + tcflag_t svflagval; +#else int svflagval; +#endif #define PASSWD_LEN 8 static char buf[PASSWD_LEN + 1]; @@ -53,11 +58,19 @@ getpass(prompt) fp = stdin; } +#if defined(sgi) + (void)ioctl(fileno(fp), TCGETA, &ttyb); + svflagval = ttyb.c_lflag; + ttyb.c_lflag &= ~ECHO; + omask = sigblock(sigmask(SIGINT)); + (void)ioctl(fileno(fp), TCSETA, &ttyb); +#else (void)ioctl(fileno(fp), TIOCGETP, &ttyb); svflagval = ttyb.sg_flags; ttyb.sg_flags &= ~ECHO; omask = sigblock(sigmask(SIGINT)); (void)ioctl(fileno(fp), TIOCSETP, &ttyb); +#endif fprintf(outfp, "%s", prompt); rewind(outfp); /* implied flush */ @@ -67,8 +80,13 @@ getpass(prompt) *p = '\0'; (void)write(fileno(outfp), "\n", 1); +#if defined(sgi) + ttyb.c_lflag = svflagval; + (void)ioctl(fileno(fp), TCSETA, &ttyb); +#else ttyb.sg_flags = svflagval; (void)ioctl(fileno(fp), TIOCSETP, &ttyb); +#endif (void)sigsetmask(omask); if (fp != stdin) (void)fclose(fp);