Annotation of 43BSDReno/contrib/isode-beta/compat/getpassword.c, revision 1.1.1.1

1.1       root        1: /* getpassword.c - generic read-the-password-from-the-tty */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/compat/RCS/getpassword.c,v 7.0 89/11/23 21:23:01 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/compat/RCS/getpassword.c,v 7.0 89/11/23 21:23:01 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       getpassword.c,v $
                     12:  * Revision 7.0  89/11/23  21:23:01  mrose
                     13:  * Release 6.0
                     14:  * 
                     15:  */
                     16: 
                     17: /*
                     18:  *                               NOTICE
                     19:  *
                     20:  *    Acquisition, use, and distribution of this module and related
                     21:  *    materials are subject to the restrictions of a license agreement.
                     22:  *    Consult the Preface in the User's Manual for the full terms of
                     23:  *    this agreement.
                     24:  *
                     25:  */
                     26: 
                     27: 
                     28: /* LINTLIBRARY */
                     29: 
                     30: #include <signal.h>
                     31: #include <stdio.h>
                     32: #include "general.h"
                     33: #include "manifest.h"
                     34: #ifdef BSD42
                     35: #include <sys/file.h>
                     36: #endif
                     37: #ifdef SYS5
                     38: #include <fcntl.h>
                     39: #include <termio.h>
                     40: #endif
                     41: #include <sys/ioctl.h>
                     42: 
                     43: 
                     44: #ifdef BSD44
                     45: char   *getpass ();
                     46: #endif
                     47: 
                     48: /*  */
                     49: 
                     50: /* roll our own since want to get past UNIX's limit of 8 octets... */
                     51: 
                     52: char *getpassword (prompt)
                     53: char *prompt;
                     54: {
                     55: #ifndef        BSD44
                     56:     register int    c;
                     57:     int            flags,
                     58:            isopen;
                     59:     register char  *bp,
                     60:                   *ep;
                     61: #ifndef        SYS5
                     62:     struct sgttyb   sg;
                     63: #else
                     64:     struct termio   sg;
                     65: #endif
                     66:     SFP            istat;
                     67:     FILE    *fp;
                     68:     static char buffer[BUFSIZ];
                     69: 
                     70:     if ((c = open ("/dev/tty", O_RDWR)) != NOTOK && (fp = fdopen (c, "r")))
                     71:        setbuf (fp, NULLCP), isopen = 1;
                     72:     else {
                     73:        if (c != NOTOK)
                     74:            (void) close (c);
                     75: 
                     76:        fp = stdin, isopen = 0;
                     77:     }
                     78: 
                     79:     istat = signal (SIGINT, SIG_IGN);
                     80: 
                     81: #ifndef        SYS5
                     82:     (void) gtty (fileno (fp), &sg);
                     83:     flags = sg.sg_flags;
                     84:     sg.sg_flags &= ~ECHO;
                     85:     (void) stty (fileno (fp), &sg);
                     86: #else
                     87:     (void) ioctl (fileno (fp), TCGETA, (char *) &sg);
                     88:     flags = sg.c_lflag;
                     89:     sg.c_lflag &= ~ECHO;
                     90:     (void) ioctl (fileno (fp), TCSETAW, (char *) &sg);
                     91: #endif
                     92: 
                     93:     fprintf (stderr, "%s", prompt);
                     94:     (void) fflush (stderr);
                     95: 
                     96:     for (ep = (bp = buffer) + sizeof buffer - 1; (c = getc (fp)) != EOF;)
                     97: #ifndef        apollo
                     98:        if (c == '\n')
                     99: #else
                    100:        if (c == '\n' || c == '\r')
                    101: #endif
                    102:            break;
                    103:        else
                    104:            if (bp < ep)
                    105:                *bp++ = c;
                    106:     *bp = NULL;
                    107: 
                    108:     fprintf (stderr, "\n");
                    109:     (void) fflush (stderr);
                    110: 
                    111: #ifndef        SYS5
                    112:     sg.sg_flags = flags;
                    113:     (void) stty (fileno (fp), &sg);
                    114: #else
                    115:     sg.c_lflag = flags;
                    116:     (void) ioctl (fileno (fp), TCSETAW, (char *) &sg);
                    117: #endif
                    118: 
                    119:     (void) signal (SIGINT, istat);
                    120: 
                    121:     if (isopen)
                    122:        (void) fclose (fp);
                    123: 
                    124:     return buffer;
                    125: #else
                    126:     return getpass (prompt);
                    127: #endif
                    128: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.