Maxim Dounin
March 11, 2023 06:26AM
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1678533841 -10800
# Sat Mar 11 14:24:01 2023 +0300
# Node ID b97f2b983d1564d29280d03828503edca21a79ee
# Parent 8771d35d55d0a2b1cefaab04401d6f837f5a05a2
Mail: fixed handling of blocked client read events in proxy.

When establishing a connection to the backend, nginx blocks reading
from the client with ngx_mail_proxy_block_read(). Previously, such
events were lost, and in some cases this resulted in connection hangs.

Notably, this affected mail_imap_ssl.t on Windows, since the test
closes connections after requesting authentication, but without
waiting for any responses (so the connection close events might be
lost).

Fix is to post an event to read from the client after connecting to
the backend if there were blocked events.

diff --git a/src/mail/ngx_mail_proxy_module.c b/src/mail/ngx_mail_proxy_module.c
--- a/src/mail/ngx_mail_proxy_module.c
+++ b/src/mail/ngx_mail_proxy_module.c
@@ -327,7 +327,9 @@ ngx_mail_proxy_pop3_handler(ngx_event_t
c->log->action = NULL;
ngx_log_error(NGX_LOG_INFO, c->log, 0, "client logged in");

- if (s->buffer->pos < s->buffer->last) {
+ if (s->buffer->pos < s->buffer->last
+ || s->connection->read->ready)
+ {
ngx_post_event(c->write, &ngx_posted_events);
}

@@ -486,7 +488,9 @@ ngx_mail_proxy_imap_handler(ngx_event_t
c->log->action = NULL;
ngx_log_error(NGX_LOG_INFO, c->log, 0, "client logged in");

- if (s->buffer->pos < s->buffer->last) {
+ if (s->buffer->pos < s->buffer->last
+ || s->connection->read->ready)
+ {
ngx_post_event(c->write, &ngx_posted_events);
}

@@ -821,7 +825,9 @@ ngx_mail_proxy_smtp_handler(ngx_event_t
c->log->action = NULL;
ngx_log_error(NGX_LOG_INFO, c->log, 0, "client logged in");

- if (s->buffer->pos < s->buffer->last) {
+ if (s->buffer->pos < s->buffer->last
+ || s->connection->read->ready)
+ {
ngx_post_event(c->write, &ngx_posted_events);
}

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH] Mail: fixed handling of blocked client read events in proxy

Maxim Dounin 731 March 11, 2023 06:26AM

Re: [PATCH] Mail: fixed handling of blocked client read events in proxy

Roman Arutyunyan 170 March 22, 2023 12:40PM

Re: [PATCH] Mail: fixed handling of blocked client read events in proxy

Maxim Dounin 156 March 23, 2023 07:58PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 136
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready