Annotation of 43BSD/ucb/ftp/getpass.c, revision 1.1.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.