## diffname boot/userpasswd.c 1992/0317 ## diff -e /dev/null /n/bootesdump/1992/0317/sys/src/9/boot/userpasswd.c 0a #include #include #include <../boot/boot.h> char password[NAMELEN]; static 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; } /* * get/set user name and password. verify password with auth server. */ void userpasswd(Method *mp) { char key[7]; char buf[8 + NAMELEN]; int fd, crfd; if(*username == 0 || strcmp(username, "none") == 0){ strcpy(username, "none"); outin("user", username, sizeof(username)); } crfd = fd = -1; while(strcmp(username, "none") != 0 && strcmp(mp->name, "local") != 0){ getpasswd(password, sizeof password); if(!passtokey(key, password, strlen(password))){ print("bad password; try again\n"); continue; } fd = open("#c/key", OWRITE); if(fd < 0) fatal("can't open #c/key; please reboot"); if(write(fd, key, 7) != 7) fatal("can't write #c/key; please reboot"); close(fd); crfd = open("#c/crypt", ORDWR); if(crfd < 0) fatal("can't open crypt file"); write(crfd, "E", 1); fd = (*mp->auth)(); if(fd < 0){ warning("password not checked!"); break; } strncpy(buf+8, username, NAMELEN); if(read(fd, buf, 8) != 8 || write(crfd, buf, 8) != 8 || read(crfd, buf, 8) != 8 || write(fd, buf, 8 + NAMELEN) != 8 + NAMELEN){ warning("password not checked!"); break; } if(read(fd, buf, 2) == 2 && buf[0]=='O' && buf[1]=='K') break; close(fd); outin("user", username, sizeof(username)); } close(fd); close(crfd); /* set user now that we're sure */ fd = open("#c/user", OWRITE|OTRUNC); if(fd >= 0){ if(write(fd, username, strlen(username)) < 0) warning("write user name"); close(fd); }else warning("open #c/user"); } . ## diffname boot/userpasswd.c 1992/0318 ## diff -e /n/bootesdump/1992/0317/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0318/sys/src/9/boot/userpasswd.c 47c while(strcmp(username, "none") != 0 && !islocal){ . 36c userpasswd(int islocal, Method *mp) . 7,31d ## diffname boot/userpasswd.c 1992/0322 ## diff -e /n/bootesdump/1992/0318/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0322/sys/src/9/boot/userpasswd.c 24,27c passtokey(key, password); . 2a #include . ## diffname boot/userpasswd.c 1992/0323 ## diff -e /n/bootesdump/1992/0322/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0323/sys/src/9/boot/userpasswd.c 20a /* Hack to do authentication testing */ p = utfrrune(username, '!'); if(p && p > username) { *p = '\0'; sauth = "any"; } . 16a char *p; . 6a extern char *sauth; . ## diffname boot/userpasswd.c 1992/0325 ## diff -e /n/bootesdump/1992/0323/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0325/sys/src/9/boot/userpasswd.c 44c fd = -1; if(mp->auth) fd = (*mp->auth)(); . 23,28d 7a #endif asdf . 6a #ifdef asdf . ## diffname boot/userpasswd.c 1992/0507 ## diff -e /n/bootesdump/1992/0325/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0507/sys/src/9/boot/userpasswd.c 40a if(islocal) break; . 27c while(strcmp(username, "none") != 0){ . ## diffname boot/userpasswd.c 1992/0728 ## diff -e /n/bootesdump/1992/0507/sys/src/9/boot/userpasswd.c /n/bootesdump/1992/0728/sys/src/9/boot/userpasswd.c 20d ## diffname boot/userpasswd.c 1993/0330 ## diff -e /n/bootesdump/1992/0728/sys/src/9/boot/userpasswd.c /n/bootesdump/1993/0330/sys/src/9/boot/userpasswd.c 70,71c /* set host's key */ if(writefile("#c/key", hostkey, DESKEYLEN) < 0) fatal(homsg); /* set host's owner (and uid of current process) */ if(writefile("#c/hostowner", username, strlen(username)) < 0) fatal(homsg); close(fd); . 61,68c if(fd > 0) . 47,58c fprint(2, "?%s\n", msg); . 42,45c msg = checkkey(mp, username, hostkey); if(msg == 0) . 28,38c passtokey(hostkey, password); . 25c fd = -1; . 17,19c int fd; char *msg; char hostkey[DESKEYLEN]; . 10a char *homsg = "can't set user name or key; please reboot"; . ## diffname boot/userpasswd.c 1993/0331 ## diff -e /n/bootesdump/1993/0330/sys/src/9/boot/userpasswd.c /n/bootesdump/1993/0331/sys/src/9/boot/userpasswd.c 36a /* try the old key algorithm till everyone has switched */ opasstokey(hostkey, password); msg = checkkey(mp, username, hostkey); if(msg == 0){ print("You have an old style key. Once you are up, please run 'aux/passwd'\n"); print("and retype your key to convert.\n"); break; } . ## diffname boot/userpasswd.c 1994/0715 ## diff -e /n/bootesdump/1993/0331/sys/src/9/boot/userpasswd.c /n/fornaxdump/1994/0715/sys/src/brazil/boot/userpasswd.c 37,44d ## diffname boot/userpasswd.c 2000/0328 ## diff -e /n/fornaxdump/1994/0715/sys/src/brazil/boot/userpasswd.c /n/emeliedump/2000/0328/sys/src/9/boot/userpasswd.c 50d ## diffname boot/userpasswd.c 2001/0527 ## diff -e /n/emeliedump/2000/0328/sys/src/9/boot/userpasswd.c /n/emeliedump/2001/0527/sys/src/9/boot/userpasswd.c 27,45d 19,22d 17c setusername(int, Method*) . 14c * get/set user name. . 6c char username[64]; char password[64]; . ## diffname boot/userpasswd.c 2001/1107 # deleted ## diff -e /n/emeliedump/2001/0527/sys/src/9/boot/userpasswd.c /n/emeliedump/2001/1107/sys/src/9/boot/userpasswd.c 1,28d