mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Mail: handling of LOGIN IMAP command untagged response.
In particular, an untagged CAPABILITY response as described in the interim RFC 3501 internet drafts was seen in various IMAP servers. Previously resulted in a broken connection, now an untagged response is proxied to client.
This commit is contained in:
parent
b2a67d2614
commit
ce88b17123
@ -1019,12 +1019,36 @@ ngx_mail_proxy_read_response(ngx_mail_session_t *s, ngx_uint_t state)
|
||||
break;
|
||||
|
||||
case ngx_imap_passwd:
|
||||
|
||||
/*
|
||||
* untagged CAPABILITY response (draft-crispin-imapv-16),
|
||||
* known to be sent by SmarterMail and Gmail
|
||||
*/
|
||||
|
||||
if (p[0] == '*' && p[1] == ' ') {
|
||||
p += 2;
|
||||
|
||||
while (p < b->last - 1) {
|
||||
if (p[0] == CR && p[1] == LF) {
|
||||
p += 2;
|
||||
break;
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
|
||||
if (b->last - p < 4) {
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
if (ngx_strncmp(p, s->tag.data, s->tag.len) == 0) {
|
||||
p += s->tag.len;
|
||||
if (p[0] == 'O' && p[1] == 'K') {
|
||||
return NGX_OK;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user