## diffname boot/getpasswd.c 1992/0317 ## diff -e /dev/null /n/bootesdump/1992/0317/sys/src/9/boot/getpasswd.c 0a #include #include #include <../boot/boot.h> void getpasswd(char *p, int len) { char c; int i, n, fd; fd = open("#c/consctl", OWRITE); if(fd < 0) fatal("can't open consctl; please reboot"); write(fd, "rawon", 5); Prompt: print("password: "); n = 0; for(;;){ do{ i = read(0, &c, 1); if(i < 0) fatal("can't read cons; please reboot"); }while(i == 0); switch(c){ case '\n': p[n] = '\0'; close(fd); print("\n"); return; case '\b': if(n > 0) n--; break; case 'u' - 'a' + 1: /* cntrl-u */ print("\n"); goto Prompt; default: if(n < len - 1) p[n++] = c; break; } } } . ## diffname boot/getpasswd.c 1992/0318 ## diff -e /n/bootesdump/1992/0317/sys/src/9/boot/getpasswd.c /n/bootesdump/1992/0318/sys/src/9/boot/getpasswd.c 4a int passtokey(char *key, char *p, int n) { uchar t[10]; int c; memset(t, ' ', sizeof t); if(n < 5) return 0; if(n > 10) n = 10; strncpy((char*)t, p, n); if(n >= 9){ c = p[8] & 0xf; if(n == 10) c += p[9] << 4; for(n = 0; n < 8; n++) if(c & (1 << n)) t[n] -= ' '; } for(n = 0; n < 7; n++) key[n] = (t[n] >> n) + (t[n+1] << (8 - (n+1))); return 1; } . ## diffname boot/getpasswd.c 1992/0322 ## diff -e /n/bootesdump/1992/0318/sys/src/9/boot/getpasswd.c /n/bootesdump/1992/0322/sys/src/9/boot/getpasswd.c 5,29d