1 #ifndef lint 2 static char *sccsid = "@(#)lock.c 4.3 (Berkeley) 06/10/83"; 3 #endif 4 5 /* 6 * Lock a terminal up until the knowledgeable Joe returns. 7 */ 8 #include <stdio.h> 9 #include <sys/types.h> 10 #include <sys/stat.h> 11 #include <signal.h> 12 #include <sgtty.h> 13 14 char masterp[] = "hasta la vista\n"; 15 struct sgttyb tty, ntty; 16 char s[BUFSIZ], s1[BUFSIZ]; 17 18 main(argc, argv) 19 char **argv; 20 { 21 register int t; 22 struct stat statb; 23 24 signal(SIGINT, SIG_IGN); 25 signal(SIGQUIT, SIG_IGN); 26 signal(SIGTSTP, SIG_IGN); 27 if (argc > 0) 28 argv[0] = 0; 29 if (ioctl(0, TIOCGETP, &tty)) 30 exit(1); 31 ntty = tty; ntty.sg_flags &= ~ECHO; 32 ioctl(0, TIOCSETN, &ntty); 33 printf("Key: "); 34 fgets(s, sizeof s, stdin); 35 printf("\nAgain: "); 36 fgets(s1, sizeof s1, stdin); 37 putchar('\n'); 38 if (strcmp(s1, s)) { 39 putchar(07); 40 stty(0, &tty); 41 exit(1); 42 } 43 s[0] = 0; 44 for (;;) { 45 fgets(s, sizeof s, stdin); 46 if (strcmp(s1, s) == 0) 47 break; 48 if (strcmp(s, masterp) == 0) 49 break; 50 putchar(07); 51 if (ioctl(0, TIOCGETP, &ntty)) 52 exit(1); 53 } 54 ioctl(0, TIOCSETN, &tty); 55 } 56