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