From e5888a1ffdae813d7575f5fb02275c6bb07e5199 Mon Sep 17 00:00:00 2001 From: Taru Karttunen Date: Wed, 30 Mar 2011 15:46:40 +0300 Subject: Import sources from 2011-03-30 iso image --- sys/src/cmd/unix/drawterm/main.c | 126 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 sys/src/cmd/unix/drawterm/main.c (limited to 'sys/src/cmd/unix/drawterm/main.c') diff --git a/sys/src/cmd/unix/drawterm/main.c b/sys/src/cmd/unix/drawterm/main.c new file mode 100755 index 000000000..16e9ece46 --- /dev/null +++ b/sys/src/cmd/unix/drawterm/main.c @@ -0,0 +1,126 @@ +#include "u.h" +#include "lib.h" +#include "kern/dat.h" +#include "kern/fns.h" +#include "user.h" + +#include "drawterm.h" + +char *argv0; +char *user; + +extern int errfmt(Fmt*); +void +sizebug(void) +{ + /* + * Needed by various parts of the code. + * This is a huge bug. + */ + assert(sizeof(char)==1); + assert(sizeof(short)==2); + assert(sizeof(ushort)==2); + assert(sizeof(int)==4); + assert(sizeof(uint)==4); + assert(sizeof(long)==4); + assert(sizeof(ulong)==4); + assert(sizeof(vlong)==8); + assert(sizeof(uvlong)==8); +} + +int +main(int argc, char **argv) +{ + eve = getuser(); + if(eve == nil) + eve = "drawterm"; + + sizebug(); + + osinit(); + procinit0(); + printinit(); + screeninit(); + + chandevreset(); + chandevinit(); + quotefmtinstall(); + + if(bind("#c", "/dev", MBEFORE) < 0) + panic("bind #c: %r"); + if(bind("#m", "/dev", MBEFORE) < 0) + panic("bind #m: %r"); + if(bind("#i", "/dev", MBEFORE) < 0) + panic("bind #i: %r"); + if(bind("#I", "/net", MBEFORE) < 0) + panic("bind #I: %r"); + if(bind("#U", "/", MAFTER) < 0) + panic("bind #U: %r"); + bind("#A", "/dev", MAFTER); + + if(open("/dev/cons", OREAD) != 0) + panic("open0: %r"); + if(open("/dev/cons", OWRITE) != 1) + panic("open1: %r"); + if(open("/dev/cons", OWRITE) != 2) + panic("open2: %r"); + + cpumain(argc, argv); + return 0; +} + +char* +getkey(char *user, char *dom) +{ + char buf[1024]; + + snprint(buf, sizeof buf, "%s@%s password", user, dom); + return readcons(buf, nil, 1); +} + +char* +findkey(char **puser, char *dom) +{ + char buf[1024], *f[50], *p, *ep, *nextp, *pass, *user; + int nf, haveproto, havedom, i; + + for(p=secstorebuf; *p; p=nextp){ + nextp = strchr(p, '\n'); + if(nextp == nil){ + ep = p+strlen(p); + nextp = ""; + }else{ + ep = nextp++; + } + if(ep-p >= sizeof buf){ + print("warning: skipping long line in secstore factotum file\n"); + continue; + } + memmove(buf, p, ep-p); + buf[ep-p] = 0; + nf = tokenize(buf, f, nelem(f)); + if(nf == 0 || strcmp(f[0], "key") != 0) + continue; + pass = nil; + haveproto = havedom = 0; + user = nil; + for(i=1; i