1 #include "u.h" 2 #include "lib.h" 3 #include "kern/dat.h" 4 #include "kern/fns.h" 5 #include "user.h" 6 7 #include "drawterm.h" 8 9 char *argv0; 10 char *user; 11 12 extern int errfmt(Fmt*); 13 void 14 sizebug(void) 15 { 16 /* 17 * Needed by various parts of the code. 18 * This is a huge bug. 19 */ 20 assert(sizeof(char)==1); 21 assert(sizeof(short)==2); 22 assert(sizeof(ushort)==2); 23 assert(sizeof(int)==4); 24 assert(sizeof(uint)==4); 25 assert(sizeof(long)==4); 26 assert(sizeof(ulong)==4); 27 assert(sizeof(vlong)==8); 28 assert(sizeof(uvlong)==8); 29 } 30 31 int 32 main(int argc, char **argv) 33 { 34 eve = getuser(); 35 if(eve == nil) 36 eve = "drawterm"; 37 38 sizebug(); 39 40 osinit(); 41 procinit0(); 42 printinit(); 43 screeninit(); 44 45 chandevreset(); 46 chandevinit(); 47 quotefmtinstall(); 48 49 if(bind("#c", "/dev", MBEFORE) < 0) 50 panic("bind #c: %r"); 51 if(bind("#m", "/dev", MBEFORE) < 0) 52 panic("bind #m: %r"); 53 if(bind("#i", "/dev", MBEFORE) < 0) 54 panic("bind #i: %r"); 55 if(bind("#I", "/net", MBEFORE) < 0) 56 panic("bind #I: %r"); 57 if(bind("#U", "/", MAFTER) < 0) 58 panic("bind #U: %r"); 59 60 if(open("/dev/cons", OREAD) != 0) 61 panic("open0: %r"); 62 if(open("/dev/cons", OWRITE) != 1) 63 panic("open1: %r"); 64 if(open("/dev/cons", OWRITE) != 2) 65 panic("open2: %r"); 66 67 cpumain(argc, argv); 68 return 0; 69 } 70 71 char* 72 getkey(char *user, char *dom) 73 { 74 char buf[1024]; 75 76 snprint(buf, sizeof buf, "%s@%s password", user, dom); 77 return readcons(buf, nil, 1); 78 } 79 80 char* 81 findkey(char **puser, char *dom) 82 { 83 char buf[1024], *f[50], *p, *ep, *nextp, *pass, *user; 84 int nf, haveproto, havedom, i; 85 86 for(p=secstorebuf; *p; p=nextp){ 87 nextp = strchr(p, '\n'); 88 if(nextp == nil){ 89 ep = p+strlen(p); 90 nextp = ""; 91 }else{ 92 ep = nextp++; 93 } 94 if(ep-p >= sizeof buf){ 95 print("warning: skipping long line in secstore factotum file\n"); 96 continue; 97 } 98 memmove(buf, p, ep-p); 99 buf[ep-p] = 0; 100 nf = tokenize(buf, f, nelem(f)); 101 if(nf == 0 || strcmp(f[0], "key") != 0) 102 continue; 103 pass = nil; 104 haveproto = havedom = 0; 105 user = nil; 106 for(i=1; i<nf; i++){ 107 if(strncmp(f[i], "user=", 5) == 0) 108 user = f[i]+5; 109 if(strncmp(f[i], "!password=", 10) == 0) 110 pass = f[i]+10; 111 if(strncmp(f[i], "dom=", 4) == 0 && strcmp(f[i]+4, dom) == 0) 112 havedom = 1; 113 if(strcmp(f[i], "proto=p9sk1") == 0) 114 haveproto = 1; 115 } 116 if(!haveproto || !havedom || !pass || !user) 117 continue; 118 *puser = strdup(user); 119 pass = strdup(pass); 120 memset(buf, 0, sizeof buf); 121 return pass; 122 } 123 return nil; 124 } 125 126