1*3919Sroot /* @(#)getpass.c 4.2 (Berkeley) 07/01/81 */ 22017Swnj #include <stdio.h> 32017Swnj #include <signal.h> 42017Swnj #include <sgtty.h> 52017Swnj 62017Swnj char * 72017Swnj getpass(prompt) 82017Swnj char *prompt; 92017Swnj { 102017Swnj struct sgttyb ttyb; 112017Swnj int flags; 122017Swnj register char *p; 132017Swnj register c; 142017Swnj FILE *fi; 152017Swnj static char pbuf[9]; 162017Swnj int (*signal())(); 172017Swnj int (*sig)(); 182017Swnj 192017Swnj if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL) 202017Swnj fi = stdin; 212017Swnj else 222017Swnj setbuf(fi, (char *)NULL); 232017Swnj sig = signal(SIGINT, SIG_IGN); 242017Swnj gtty(fileno(fi), &ttyb); 252017Swnj flags = ttyb.sg_flags; 262017Swnj ttyb.sg_flags &= ~ECHO; 272017Swnj stty(fileno(fi), &ttyb); 28*3919Sroot fprintf(stderr, "%s", prompt); fflush(stderr); 292017Swnj for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) { 302017Swnj if (p < &pbuf[8]) 312017Swnj *p++ = c; 322017Swnj } 332017Swnj *p = '\0'; 34*3919Sroot fprintf(stderr, "\n"); fflush(stderr); 352017Swnj ttyb.sg_flags = flags; 362017Swnj stty(fileno(fi), &ttyb); 372017Swnj signal(SIGINT, sig); 382017Swnj if (fi != stdin) 392017Swnj fclose(fi); 402017Swnj return(pbuf); 412017Swnj } 42