]> granicus.if.org Git - sudo/commitdiff
now works on sgi's
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 15 Feb 1993 19:19:45 +0000 (19:19 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 15 Feb 1993 19:19:45 +0000 (19:19 +0000)
getpass.c

index 839d45469443e7a3bc09fcd8bde8ef89f93f0946..1d44ad909d6c24f612f7c1a80d1d03ebd658701d 100644 (file)
--- a/getpass.c
+++ b/getpass.c
@@ -22,9 +22,6 @@ static char sccsid[] = "@(#)getpass.c based on 5.3 (Berkeley) 9/22/88";
 
 #include <fcntl.h>
 #include <sgtty.h>
-#ifdef sgi
-#include <curses.h>
-#endif
 #include <sys/ioctl.h>
 #include <sys/signal.h>
 #include <stdio.h>
@@ -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);