diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-01-06 03:09:00 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-01-06 03:09:00 +0100 |
commit | 2dae1ed53a73d81bfb86778793a6bda265d5140d (patch) | |
tree | e037c4a663fc9d17906cc2045c488232ac223ece /sys/src/libauthsrv/_asgetresp.c | |
parent | e064752dd476b7a2f76567f8cc15f9c2645e5d3d (diff) |
auth: release dp9ik implementation and reentrant factotum
Diffstat (limited to 'sys/src/libauthsrv/_asgetresp.c')
-rw-r--r-- | sys/src/libauthsrv/_asgetresp.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/sys/src/libauthsrv/_asgetresp.c b/sys/src/libauthsrv/_asgetresp.c index da0e2bd20..3f7cb5d4f 100644 --- a/sys/src/libauthsrv/_asgetresp.c +++ b/sys/src/libauthsrv/_asgetresp.c @@ -5,28 +5,40 @@ int _asgetresp(int fd, Ticket *t, Authenticator *a, Authkey *k) { - char tbuf[TICKETLEN+AUTHENTLEN]; + char buf[MAXTICKETLEN+MAXAUTHENTLEN], err[ERRMAX]; int n, m; - m = TICKETLEN; memset(t, 0, sizeof(Ticket)); - if(a != nil){ - m += AUTHENTLEN; + if(a != nil) memset(a, 0, sizeof(Authenticator)); - } - n = _asrdresp(fd, tbuf, m); - if(n <= 0) - return -1; + strcpy(err, "AS protocol botch"); + errstr(err, ERRMAX); - m = convM2T(tbuf, n, t, k); - if(m <= 0) + if(_asrdresp(fd, buf, 0) < 0) return -1; - if(a != nil){ - if(convM2A(tbuf+m, n-m, a, t) <= 0) + for(n = 0; (m = convM2T(buf, n, t, k)) <= 0; n += m){ + m = -m; + if(m <= n || m > sizeof(buf)) + return -1; + m -= n; + if(readn(fd, buf+n, m) != m) return -1; } + if(a != nil){ + for(n = 0; (m = convM2A(buf, n, a, t)) <= 0; n += m){ + m = -m; + if(m <= n || m > sizeof(buf)) + return -1; + m -= n; + if(readn(fd, buf+n, m) != m) + return -1; + } + } + + errstr(err, ERRMAX); + return 0; } |