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 Colombiergetpasswd(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