xref: /plan9/sys/src/9/boot/getpasswd.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1 #include <u.h>
2 #include <libc.h>
3 #include <../boot/boot.h>
4 
5 void
getpasswd(char * p,int len)6 getpasswd(char *p, int len)
7 {
8 	char c;
9 	int i, n, fd;
10 
11 	fd = open("#c/consctl", OWRITE);
12 	if(fd < 0)
13 		fatal("can't open consctl; please reboot");
14 	write(fd, "rawon", 5);
15  Prompt:
16 	print("password: ");
17 	n = 0;
18 	for(;;){
19 		do{
20 			i = read(0, &c, 1);
21 			if(i < 0)
22 				fatal("can't read cons; please reboot");
23 		}while(i == 0);
24 		switch(c){
25 		case '\n':
26 			p[n] = '\0';
27 			close(fd);
28 			print("\n");
29 			return;
30 		case '\b':
31 			if(n > 0)
32 				n--;
33 			break;
34 		case 'u' - 'a' + 1:		/* cntrl-u */
35 			print("\n");
36 			goto Prompt;
37 		default:
38 			if(n < len - 1)
39 				p[n++] = c;
40 			break;
41 		}
42 	}
43 }
44