From 2dae1ed53a73d81bfb86778793a6bda265d5140d Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 6 Jan 2016 03:09:00 +0100 Subject: auth: release dp9ik implementation and reentrant factotum --- sys/src/libauthsrv/convM2PR.c | 45 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'sys/src/libauthsrv/convM2PR.c') diff --git a/sys/src/libauthsrv/convM2PR.c b/sys/src/libauthsrv/convM2PR.c index c7bd4974d..ecc46e649 100644 --- a/sys/src/libauthsrv/convM2PR.c +++ b/sys/src/libauthsrv/convM2PR.c @@ -2,35 +2,38 @@ #include #include -#define CHAR(x) f->x = *p++ -#define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2 -#define VLONG(q) q = (p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24)); p += 4 -#define LONG(x) VLONG(f->x) -#define STRING(x,n) memmove(f->x, p, n); p += n +extern int form1M2B(char *ap, int n, uchar key[32]); int convM2PR(char *ap, int n, Passwordreq *f, Ticket *t) { - uchar *p, buf[PASSREQLEN]; + uchar *p, buf[MAXPASSREQLEN]; + int m; memset(f, 0, sizeof(Passwordreq)); - if(n < PASSREQLEN) - return -PASSREQLEN; - - if(t){ - memmove(buf, ap, PASSREQLEN); - ap = (char*)buf; - decrypt(t->key, ap, PASSREQLEN); + if(t->form == 0){ + m = 1+2*ANAMELEN+1+SECRETLEN; + if(n < m) + return -m; + memmove(buf, ap, m); + decrypt(t->key, buf, m); + } else { + m = 12+2*ANAMELEN+1+SECRETLEN+16; + if(n < m) + return -m; + memmove(buf, ap, m); + if(form1M2B((char*)buf, m, t->key) < 0) + return m; } - p = (uchar*)ap; - CHAR(num); - STRING(old, ANAMELEN); + p = buf; + f->num = *p++; + memmove(f->old, p, ANAMELEN), p += ANAMELEN; + memmove(f->new, p, ANAMELEN), p += ANAMELEN; + f->changesecret = *p++; + memmove(f->secret, p, SECRETLEN); f->old[ANAMELEN-1] = 0; - STRING(new, ANAMELEN); f->new[ANAMELEN-1] = 0; - CHAR(changesecret); - STRING(secret, SECRETLEN); f->secret[SECRETLEN-1] = 0; - n = p - (uchar*)ap; - return n; + + return m; } -- cgit v1.2.3