M bitsy/mem.h => bitsy/mem.h +1 -1
@@ 70,7 70,7 @@
*/
#define Flash_bootldr (FLASHZERO+0x0) /* boot loader */
#define Flash_kernel (FLASHZERO+0x10000) /* boot kernel */
-#define Flash_tar (FLASHZERO+0x100000) /* tar file containing fs.sac */
+#define Flash_tar (FLASHZERO+0x200000) /* fs.sac (tar file) */
/*
* virtual MMU
M bitsy/power.c => bitsy/power.c +5 -2
@@ 78,7 78,9 @@ static void
sa1100_power_off(void)
{
- /* enable wakeup by µcontroller, on/off switch or real-time clock alarm */
+ /* enable wakeup by µcontroller, on/off switch
+ * or real-time clock alarm
+ */
powerregs->pwer = 1 << IRQrtc | 1 << IRQgpio0 | 1 << IRQgpio1;
/* clear previous reset status */
@@ 88,7 90,8 @@ sa1100_power_off(void)
powerregs->pcfr = PCFR_opde | PCFR_fp | PCFR_fs;
powerregs->pgsr = 0;
/* set resume address. The loader jumps to it */
- powerregs->pspr = (ulong)sa1100_power_resume;
+// powerregs->pspr = (ulong)sa1100_power_resume;
+ powerregs->pspr = 0;
/* set lowest clock; delay to avoid resume hangs on fast sa1110 */
delay(90);
M bitsy/screen.c => bitsy/screen.c +1 -7
@@ 212,13 212,7 @@ lcdtweak(Cmdbuf *cmd)
void
screenpower(int on)
{
- if (on == 0){
- memmove(savedpalette, framebuf->palette, sizeof framebuf->palette);
- blankscreen(1);
- } else {
- memmove(framebuf->palette, savedpalette, sizeof framebuf->palette);
- blankscreen(0);
- }
+ blankscreen(on == 0);
}
void
M boot/doauthenticate.c => boot/doauthenticate.c +15 -8
@@ 73,21 73,28 @@ void
doauthenticate(int fd, Method *mp)
{
char *msg;
- char authlist[1024];
+ char trbuf[TICKREQLEN];
+ char tbuf[2*TICKETLEN];
print("session...");
- if(fsession(fd, authlist, sizeof authlist) < 0)
-{print("boot failed in session: %r\n");
+ if(fsession(fd, trbuf, sizeof trbuf) < 0)
fatal("session command failed");
-}
-
-print("boot says session done\n");
/* no authentication required? */
- if(authlist[0] == 0)
+ memset(tbuf, 0, 2*TICKETLEN);
+ if(trbuf[0] == 0)
return;
- print("not authenticated!!!\n");
+ /* try getting to an auth server */
+ print("getting ticket...");
+ msg = fromauth(mp, trbuf, tbuf);
+ print("authenticating...");
+ if(msg == 0)
+ if(fauth(fd, tbuf) >= 0)
+ return;
+
+ /* didn't work, go for the security hole */
+ fprint(2, "no authentication server (%s), using your key as server key\n", msg);
}
char*
M port/auth.c => port/auth.c +32 -82
@@ 11,31 11,6 @@ char *eve;
char evekey[DESKEYLEN];
char hostdomain[DOMLEN];
-struct Session
-{
- char *authlist;
-};
-
-Session*
-allocsession(char *authlist)
-{
- Session *s;
-
- s = smalloc(sizeof(*s));
- s->authlist = nil;
- kstrdup(&s->authlist, authlist);
- return s;
-}
-
-void
-freesession(Session *s)
-{
- if(s == nil)
- return;
- free(s->authlist);
- free(s);
-}
-
/*
* return true if current user is eve
*/
@@ 136,16 111,36 @@ Return:
return m;
}
-void
-sendsession(Chan *c)
+long
+sysfsession(ulong *arg)
{
Fcall f;
uchar *msg;
- uint n, m;
+ uint authlen, n, m;
+ Chan *c;
uvlong oo;
+//BUG print("warning: stub fsession being used\n");
+ authlen = arg[2];
+ validaddr(arg[1], authlen, 1);
+ c = fdtochan(arg[0], ORDWR, 0, 1);
+ if(waserror()){
+ cclose(c);
+ nexterror();
+ }
+
+ if(c->flag & CMSG){
+//BUG what to do?
+ ((uchar*)arg[1])[0] = 0;
+ poperror();
+ cclose(c);
+ return 0;
+ }
+
f.type = Tsession;
f.tag = NOTAG;
+ f.nchal = 0;
+ f.chal = (uchar*)"";
msg = smalloc(8192+IOHDRSZ);
if(waserror()){
free(msg);
@@ 161,7 156,6 @@ sendsession(Chan *c)
unlock(c);
m = devtab[c->type]->write(c, msg, n, oo);
-print("session sent\n");
if(m < n){
lock(c);
@@ 174,78 168,34 @@ print("session sent\n");
m = devtab[c->type]->read(c, msg, 8192+IOHDRSZ, c->offset);
if(m <= 0)
error("EOF receiving fsession reply");
-print("rsession rcvd\n");
lock(c);
c->offset += m;
unlock(c);
n = convM2S(msg, m, &f);
-print("rsession conv returns %d\n", n);
if(n != m)
error("bad fsession conversion on reply");
if(f.type != Rsession)
error("unexpected reply type in fsession");
- c->session = allocsession(f.authlist);
+ m = f.nchal;
+ if(m > authlen)
+ error(Eshort);
+//BUG print("auth stuff ignored; noauth by default\n");
+ ((uchar*)arg[1])[0] = 0;
free(msg);
poperror();
-}
-
-long
-sysfsession(ulong *arg)
-{
- Chan *c;
- uint authlen, n;
-
- authlen = arg[2];
- validaddr(arg[1], authlen, 1);
- c = fdtochan(arg[0], ORDWR, 0, 1);
- if(waserror()){
- cclose(c);
- nexterror();
- }
-
- if(c->session == nil){
- if(c->flag&CMSG)
- error("session on mounted channel");
- sendsession(c);
- }
-
- n = strlen(c->session->authlist)+1;
- if(n > authlen)
- error(Eshort);
- memmove((uchar*)arg[1], c->session->authlist, n);
-
poperror();
cclose(c);
- return n;
-
+ return m;
}
long
-sysfauth(ulong *arg)
+sysfauth(ulong *)
{
- Chan *c;
- uint authlen, rauthlen;
- int n;
-
- authlen = arg[2];
- validaddr(arg[1], authlen, 1);
- rauthlen = arg[4];
- validaddr(arg[3], rauthlen, 1);
- c = fdtochan(arg[0], ORDWR, 0, 1);
- if(waserror()){
- cclose(c);
- nexterror();
- }
-
- n = mntauth(c, (uchar*)arg[1], authlen, (uchar*)arg[3], rauthlen);
-
- poperror();
- cclose(c);
- return n;
-
+ error("sysfauth unimplemented");
+ return -1;
}
/*
M port/devdraw.c => port/devdraw.c +2 -6
@@ 303,14 303,13 @@ drawrefreshscreen(DImage *l, Client *client)
static
void
-drawrefresh(Memimage *l, Rectangle r, void *v)
+drawrefresh(Memimage*, Rectangle r, void *v)
{
Refx *x;
DImage *d;
Client *c;
Refresh *ref;
- USED(l);
if(v == 0)
return;
x = v;
@@ 1014,7 1013,6 @@ drawread(Chan *c, void *a, long n, vlong off)
ulong offset = off;
char buf[16];
- USED(offset);
if(c->qid.type & QTDIR)
return devdirread(c, a, n, 0, 0, drawgen);
cl = drawclient(c);
@@ 1121,14 1119,12 @@ drawwakeall(void)
}
static long
-drawwrite(Chan *c, void *a, long n, vlong off)
+drawwrite(Chan *c, void *a, long n, vlong)
{
char buf[128], *fields[4], *q;
Client *cl;
int i, m, red, green, blue, x;
- ulong offset = off;
- USED(offset);
if(c->qid.type & QTDIR)
error(Eisdir);
cl = drawclient(c);
M port/devmnt.c => port/devmnt.c +3 -27
@@ 37,6 37,7 @@ struct Mntalloc
}mntalloc;
void mattach(Mnt*, Chan*, char*);
+void mntauth(Mnt*, Mntrpc*, char*, ushort);
Mnt* mntchk(Chan*);
void mntdirfix(uchar*, Chan*);
Mntrpc* mntflushalloc(Mntrpc*, ulong);
@@ 192,6 193,8 @@ mattach(Mnt *m, Chan *c, char *spec)
r->request.fid = c->fid;
r->request.uname = up->user;
r->request.aname = spec;
+ r->request.nauth = 0;
+ r->request.auth = (uchar*)"";
mountrpc(m, r);
c->qid = r->reply.qid;
@@ 460,33 463,6 @@ mntwstat(Chan *c, uchar *dp, int n)
return n;
}
-int
-mntauth(Chan *c, uchar *auth, int nauth, uchar *rauth, int nrauth)
-{
- int n;
- Mnt *m;
- Mntrpc *r;
-
- m = mntchk(c);
- r = mntralloc(c, m->c->iounit);
- if(waserror()) {
- mntfree(r);
- nexterror();
- }
- r->request.type = Tauth;
- r->request.fid = c->fid;
- r->request.nauth = nauth;
- r->request.auth = auth;
- mountrpc(m, r);
- n = r->reply.nrauth;
- if(nrauth < n)
- error(Eshort);
- memmove(rauth, r->reply.rauth, n);
- poperror();
- mntfree(r);
- return n;
-}
-
static long
mntread(Chan *c, void *buf, long n, vlong off)
{
M port/portfns.h => port/portfns.h +0 -1
@@ 162,7 162,6 @@ void microdelay(int);
void mkqid(Qid*, vlong, ulong, int);
void mmurelease(Proc*);
void mmuswitch(Proc*);
-int mntauth(Chan*, uchar*, int, uchar*, int);
void mntdump(void);
void mountfree(Mount*);
ulong msize(void*);