]> git.lizzy.rs Git - plan9front.git/commitdiff
imap4d: simplify auth code using encodefmt(), use readn() to get multiple of 3*18...
authorcinap_lenrek <cinap_lenrek@felloff.net>
Thu, 12 Mar 2015 16:29:17 +0000 (17:29 +0100)
committercinap_lenrek <cinap_lenrek@felloff.net>
Thu, 12 Mar 2015 16:29:17 +0000 (17:29 +0100)
sys/src/cmd/ip/imap4d/auth.c
sys/src/cmd/ip/imap4d/imap4d.c
sys/src/cmd/ip/imap4d/msg.c

index b087137322f12a422e2d924de38604a58d2481f5..b8dcd7581dcb65a3c4bbf09f35df0ce21c4421c8 100644 (file)
@@ -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;
index e8c4d9950b3896e50c0cc4cdbcb575a829b3d7c7..6eafe481e9b86766e3481f8ea1e6b180ee53bfe4 100644 (file)
@@ -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;
index 3a78fc63cfa8cc16785af39d23f0dea0b2685e44..46ccea2e511111ad04565b8f02c07a8f41dbe827 100644 (file)
@@ -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)