]> git.kaiwu.me - nginx.git/commitdiff
Mail: handling of LOGIN IMAP command untagged response.
authorSergey Kandaurov <pluknet@nginx.com>
Wed, 23 Oct 2024 20:52:21 +0000 (00:52 +0400)
committerpluknet <pluknet@nginx.com>
Tue, 26 Nov 2024 15:07:17 +0000 (19:07 +0400)
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.

src/mail/ngx_mail_proxy_module.c

index efed9ab3e610c0f853386d925aef4d38b66fd54c..1c6d0372e743f33cef421906689ade58c10290ab 100644 (file)
@@ -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;
         }