diff options
-rw-r--r-- | sys/src/cmd/ip/imap4d/auth.c | 12 | ||||
-rw-r--r-- | sys/src/cmd/ip/imap4d/imap4d.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/ip/imap4d/msg.c | 9 |
3 files changed, 11 insertions, 14 deletions
diff --git a/sys/src/cmd/ip/imap4d/auth.c b/sys/src/cmd/ip/imap4d/auth.c index b08713732..b8dcd7581 100644 --- a/sys/src/cmd/ip/imap4d/auth.c +++ b/sys/src/cmd/ip/imap4d/auth.c @@ -130,17 +130,11 @@ cramauth(void) AuthInfo *ai; Chalstate *cs; char *s, *t; - int n; if((cs = auth_challenge("proto=cram role=server")) == nil) return "couldn't get cram challenge"; - n = cs->nchal; - s = binalloc(&parseBin, n * 2, 0); - n = enc64(s, n * 2, (uchar*)cs->chal, n); - Bprint(&bout, "+ "); - Bwrite(&bout, s, n); - Bprint(&bout, "\r\n"); + Bprint(&bout, "+ %.*[\r\n", cs->nchal, cs->chal); if(Bflush(&bout) < 0) writeErr(); @@ -172,7 +166,6 @@ passLogin(char *user, char *secret) Chalstate *cs; uchar digest[MD5dlen]; char response[2*MD5dlen+1]; - int i; if((cs = auth_challenge("proto=cram role=server")) == nil) return nil; @@ -180,8 +173,7 @@ passLogin(char *user, char *secret) hmac_md5((uchar*)cs->chal, strlen(cs->chal), (uchar*)secret, strlen(secret), digest, nil); - for(i = 0; i < MD5dlen; i++) - snprint(response + 2*i, sizeof(response) - 2*i, "%2.2ux", digest[i]); + snprint(response, sizeof(response), "%.*H", MD5dlen, digest); cs->user = user; cs->resp = response; diff --git a/sys/src/cmd/ip/imap4d/imap4d.c b/sys/src/cmd/ip/imap4d/imap4d.c index e8c4d9950..6eafe481e 100644 --- a/sys/src/cmd/ip/imap4d/imap4d.c +++ b/sys/src/cmd/ip/imap4d/imap4d.c @@ -207,6 +207,10 @@ main(int argc, char *argv[]) Binit(&bin, 0, OREAD); Binit(&bout, 1, OWRITE); + /* for auth */ + fmtinstall('H', encodefmt); + fmtinstall('[', encodefmt); + preauth = 0; allowPass = 0; allowCR = 0; diff --git a/sys/src/cmd/ip/imap4d/msg.c b/sys/src/cmd/ip/imap4d/msg.c index 3a78fc63c..46ccea2e5 100644 --- a/sys/src/cmd/ip/imap4d/msg.c +++ b/sys/src/cmd/ip/imap4d/msg.c @@ -596,17 +596,18 @@ enc64x18(char *out, int lim, uchar *in, int n) { int m, mm, nn; - nn = 0; - for(; n > 0; n -= m){ + for(nn = 0; n > 0; n -= m, nn += mm){ m = 18 * 3; if(m > n) m = n; + nn += 2; /* \r\n */ + assert(nn < lim); mm = enc64(out, lim - nn, in, m); + assert(mm > 0); in += m; out += mm; *out++ = '\r'; *out++ = '\n'; - nn += mm + 2; } return nn; } @@ -619,7 +620,7 @@ body64(int in, int out) int m, n; for(;;){ - n = read(in, buf, sizeof(buf)); + n = readn(in, buf, sizeof(buf)); if(n < 0) return; if(n == 0) |