From: Richard Kettlewell Date: Fri, 21 Dec 2007 16:02:28 +0000 (+0000) Subject: protocol gen 2 support for eclient.c X-Git-Tag: 3.0~190 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/416609cff1292890e48a89a0d90bcf421e735a32?ds=sidebyside protocol gen 2 support for eclient.c --- diff --git a/lib/eclient.c b/lib/eclient.c index 2d85fb9..012db98 100644 --- a/lib/eclient.c +++ b/lib/eclient.c @@ -536,7 +536,7 @@ static void authbanner_opcallback(disorder_eclient *c, const char *res; char **rvec; int nrvec; - const char *algo = "SHA1"; + const char *protocol, *algorithm, *challenge; D(("authbanner_opcallback")); if(c->rc / 100 != 2 @@ -547,15 +547,22 @@ static void authbanner_opcallback(disorder_eclient *c, disorder_eclient_close(c); return; } - if(nrvec > 1) { - algo = *rvec++; - --nrvec; + if(nrvec != 3) { + protocol_error(c, op, c->rc, "%s: %s", c->ident, c->line); + disorder_eclient_close(c); + } + protocol = *rvec++; + algorithm = *rvec++; + challenge = *rvec++; + if(strcmp(protocol, "2")) { + protocol_error(c, op, c->rc, "%s: %s", c->ident, c->line); + disorder_eclient_close(c); } - nonce = unhex(rvec[0], &nonce_len); - res = authhash(nonce, nonce_len, config->password, algo); + nonce = unhex(challenge, &nonce_len); + res = authhash(nonce, nonce_len, config->password, algorithm); if(!res) { protocol_error(c, op, c->rc, "%s: unknown authentication algorithm '%s'", - c->ident, algo); + c->ident, algorithm); disorder_eclient_close(c); return; }