BSD 4_3_Tahoe release
[unix-history] / usr / src / new / xns / morexnslib / auth / getXNSpass.c
CommitLineData
95f51977
C
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 */
b8f253e8 7
95f51977
C
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 */
6a4d2ab3
BJ
21#include <stdio.h>
22#include <signal.h>
23#include <sgtty.h>
95f51977 24#define PASSLEN 80
6a4d2ab3
BJ
25
26char *
95f51977 27getXNSpass(prompt)
6a4d2ab3
BJ
28char *prompt;
29{
30 struct sgttyb ttyb;
31 int flags;
32 register char *p;
33 register c;
34 FILE *fi;
95f51977 35 static char pbuf[PASSLEN+1];
6a4d2ab3
BJ
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);
dbb176a2 44 ioctl(fileno(fi), TIOCGETP, &ttyb);
6a4d2ab3
BJ
45 flags = ttyb.sg_flags;
46 ttyb.sg_flags &= ~ECHO;
dbb176a2 47 ioctl(fileno(fi), TIOCSETP, &ttyb);
790acfed 48 fprintf(stderr, "%s", prompt); fflush(stderr);
6a4d2ab3 49 for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
95f51977 50 if (p < &pbuf[PASSLEN])
6a4d2ab3
BJ
51 *p++ = c;
52 }
53 *p = '\0';
790acfed 54 fprintf(stderr, "\n"); fflush(stderr);
6a4d2ab3 55 ttyb.sg_flags = flags;
dbb176a2 56 ioctl(fileno(fi), TIOCSETP, &ttyb);
6a4d2ab3
BJ
57 signal(SIGINT, sig);
58 if (fi != stdin)
59 fclose(fi);
60 return(pbuf);
61}