|
|
1.1 ! root 1: /* $Header: getXNSpass.c,v 2.0 85/11/21 07:22:25 jqj Exp $ */ ! 2: /* ! 3: * contains: getXNSpass ! 4: * based on the standard library routine getpass(), it is modified ! 5: * for XNS passwords, which may be of almost arbitrary length ! 6: */ ! 7: ! 8: /* $Log: getXNSpass.c,v $ ! 9: * Revision 2.0 85/11/21 07:22:25 jqj ! 10: * 4.3BSD standard release ! 11: * ! 12: * Revision 1.1 85/03/26 06:29:09 jqj ! 13: * Initial revision ! 14: * ! 15: * Revision 1.1 85/03/26 06:29:09 jqj ! 16: * Initial revision ! 17: * ! 18: */ ! 19: ! 20: /* @(#)getpass.c 4.3 (Berkeley) 5/16/84 */ ! 21: #include <stdio.h> ! 22: #include <signal.h> ! 23: #include <sgtty.h> ! 24: #define PASSLEN 80 ! 25: ! 26: char * ! 27: getXNSpass(prompt) ! 28: char *prompt; ! 29: { ! 30: struct sgttyb ttyb; ! 31: int flags; ! 32: register char *p; ! 33: register c; ! 34: FILE *fi; ! 35: static char pbuf[PASSLEN+1]; ! 36: int (*signal())(); ! 37: int (*sig)(); ! 38: ! 39: if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL) ! 40: fi = stdin; ! 41: else ! 42: setbuf(fi, (char *)NULL); ! 43: sig = signal(SIGINT, SIG_IGN); ! 44: ioctl(fileno(fi), TIOCGETP, &ttyb); ! 45: flags = ttyb.sg_flags; ! 46: ttyb.sg_flags &= ~ECHO; ! 47: ioctl(fileno(fi), TIOCSETP, &ttyb); ! 48: fprintf(stderr, "%s", prompt); fflush(stderr); ! 49: for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) { ! 50: if (p < &pbuf[PASSLEN]) ! 51: *p++ = c; ! 52: } ! 53: *p = '\0'; ! 54: fprintf(stderr, "\n"); fflush(stderr); ! 55: ttyb.sg_flags = flags; ! 56: ioctl(fileno(fi), TIOCSETP, &ttyb); ! 57: signal(SIGINT, sig); ! 58: if (fi != stdin) ! 59: fclose(fi); ! 60: return(pbuf); ! 61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.