Annotation of 43BSD/ucb/ftp/getpass.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1985 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  */
        !             6: 
        !             7: #ifndef lint
        !             8: static char sccsid[] = "@(#)getpass.c  5.4 (Berkeley) 3/7/86";
        !             9: #endif not lint
        !            10: 
        !            11: #include <stdio.h>
        !            12: #include <signal.h>
        !            13: #include <sgtty.h>
        !            14: 
        !            15: static struct sgttyb ttyb;
        !            16: static int flags;
        !            17: static FILE *fi;
        !            18: 
        !            19: static intfix()
        !            20: {
        !            21:        ttyb.sg_flags = flags;
        !            22:        if (fi != NULL)
        !            23:                (void) stty(fileno(fi), &ttyb);
        !            24:        exit(SIGINT);
        !            25: }
        !            26: 
        !            27: char *
        !            28: mygetpass(prompt)
        !            29: char *prompt;
        !            30: {
        !            31:        register char *p;
        !            32:        register c;
        !            33:        static char pbuf[50+1];
        !            34:        int (*signal())();
        !            35:        int (*sig)();
        !            36: 
        !            37:        if ((fi = fopen("/dev/tty", "r")) == NULL)
        !            38:                fi = stdin;
        !            39:        else
        !            40:                setbuf(fi, (char *)NULL);
        !            41:        sig = signal(SIGINT, intfix);
        !            42:        (void) gtty(fileno(fi), &ttyb);
        !            43:        flags = ttyb.sg_flags;
        !            44:        ttyb.sg_flags &= ~ECHO;
        !            45:        (void) stty(fileno(fi), &ttyb);
        !            46:        fprintf(stderr, "%s", prompt); (void) fflush(stderr);
        !            47:        for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
        !            48:                if (p < &pbuf[sizeof(pbuf)-1])
        !            49:                        *p++ = c;
        !            50:        }
        !            51:        *p = '\0';
        !            52:        fprintf(stderr, "\n"); (void) fflush(stderr);
        !            53:        ttyb.sg_flags = flags;
        !            54:        (void) stty(fileno(fi), &ttyb);
        !            55:        (void) signal(SIGINT, sig);
        !            56:        if (fi != stdin)
        !            57:                (void) fclose(fi);
        !            58:        return(pbuf);
        !            59: }

unix.superglobalmegacorp.com

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