<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nginx.git/src/mail/ngx_mail_handler.c, branch release-1.28.3</title>
<subtitle>nginx</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/'/>
<entry>
<title>Mail: improved error handling in plain/login/cram-md5 auth methods.</title>
<updated>2025-12-23T18:40:33+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2025-08-12T11:55:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=fbbbf189dadf3bd59c2462af68c16f2c2874d4ee'/>
<id>fbbbf189dadf3bd59c2462af68c16f2c2874d4ee</id>
<content type='text'>
Previously, login and password storage could be left in inconsistent
state in a session after decoding errors.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, login and password storage could be left in inconsistent
state in a session after decoding errors.
</pre>
</div>
</content>
</entry>
<entry>
<title>SSL: removed the "ssl" directive.</title>
<updated>2023-06-08T10:49:27+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-06-08T10:49:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=d32f66f1e8dc81a0edbadbacf74191684a653d09'/>
<id>d32f66f1e8dc81a0edbadbacf74191684a653d09</id>
<content type='text'>
It has been deprecated since 7270:46c0c7ef4913 (1.15.0) in favour of
the "ssl" parameter of the "listen" directive, which has been available
since 2224:109849282793 (0.7.14).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It has been deprecated since 7270:46c0c7ef4913 (1.15.0) in favour of
the "ssl" parameter of the "listen" directive, which has been available
since 2224:109849282793 (0.7.14).
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: max_errors directive.</title>
<updated>2021-05-19T00:13:31+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-05-19T00:13:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=173f16f736c10eae46cd15dd861b04b82d91a37a'/>
<id>173f16f736c10eae46cd15dd861b04b82d91a37a</id>
<content type='text'>
Similarly to smtpd_hard_error_limit in Postfix and smtp_max_unknown_commands
in Exim, specifies the number of errors after which the connection is closed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similarly to smtpd_hard_error_limit in Postfix and smtp_max_unknown_commands
in Exim, specifies the number of errors after which the connection is closed.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: fixed reading with fully filled buffer (ticket #2159).</title>
<updated>2021-04-21T20:24:59+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-04-21T20:24:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=7b9920aad80299d79f4dba08de36693804f8751c'/>
<id>7b9920aad80299d79f4dba08de36693804f8751c</id>
<content type='text'>
With SMTP pipelining, ngx_mail_read_command() can be called with s-&gt;buffer
without any space available, to parse additional commands received to the
buffer on previous calls.  Previously, this resulted in recv() being called
with zero length, resulting in zero being returned, which was interpreted
as a connection close by the client, so nginx silently closed connection.

Fix is to avoid calling c-&gt;recv() if there is no free space in the buffer,
but continue parsing of the already received commands.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
With SMTP pipelining, ngx_mail_read_command() can be called with s-&gt;buffer
without any space available, to parse additional commands received to the
buffer on previous calls.  Previously, this resulted in recv() being called
with zero length, resulting in zero being returned, which was interpreted
as a connection close by the client, so nginx silently closed connection.

Fix is to avoid calling c-&gt;recv() if there is no free space in the buffer,
but continue parsing of the already received commands.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: fixed build without SSL.</title>
<updated>2021-03-11T01:46:26+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-11T01:46:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=3bbec30739b17783394e34924ca732b946550323'/>
<id>3bbec30739b17783394e34924ca732b946550323</id>
<content type='text'>
Broken by d84f13618277 and 12ea1de7d87c (1.19.8).

Reported by Sergey Osokin.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Broken by d84f13618277 and 12ea1de7d87c (1.19.8).

Reported by Sergey Osokin.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: realip module.</title>
<updated>2021-03-05T14:16:29+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-05T14:16:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=c2e22bcf325ee0031d1c86fbdfb79a2f8e1b4a7b'/>
<id>c2e22bcf325ee0031d1c86fbdfb79a2f8e1b4a7b</id>
<content type='text'>
When configured with the "set_real_ip_from", it can set client's IP
address as visible in logs to the one obtained via the PROXY protocol.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When configured with the "set_real_ip_from", it can set client's IP
address as visible in logs to the one obtained via the PROXY protocol.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: parsing of the PROXY protocol from clients.</title>
<updated>2021-03-05T14:16:24+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-05T14:16:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=1fce224f01b5a9b503315bd24e99421e5ca5bd7c'/>
<id>1fce224f01b5a9b503315bd24e99421e5ca5bd7c</id>
<content type='text'>
Activated with the "proxy_protocol" parameter of the "listen" directive.
Obtained information is passed to the auth_http script in Proxy-Protocol-Addr,
Proxy-Protocol-Port, Proxy-Protocol-Server-Addr, and Proxy-Protocol-Server-Port
headers.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Activated with the "proxy_protocol" parameter of the "listen" directive.
Obtained information is passed to the auth_http script in Proxy-Protocol-Addr,
Proxy-Protocol-Port, Proxy-Protocol-Server-Addr, and Proxy-Protocol-Server-Port
headers.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: fixed log action after SSL handshake.</title>
<updated>2021-03-05T14:16:20+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-05T14:16:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=83de0868b1bb5275e51698545e2165782bb5421d'/>
<id>83de0868b1bb5275e51698545e2165782bb5421d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: postponed session initialization under accept mutex.</title>
<updated>2021-03-05T14:16:19+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-05T14:16:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=7d4cd6cff428cb8717f8560a00f825d72b49f68a'/>
<id>7d4cd6cff428cb8717f8560a00f825d72b49f68a</id>
<content type='text'>
Similarly to 40e8ce405859 in the stream module, this reduces the time
accept mutex is held.  This also simplifies following changes to
introduce PROXY protocol support.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similarly to 40e8ce405859 in the stream module, this reduces the time
accept mutex is held.  This also simplifies following changes to
introduce PROXY protocol support.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mail: added missing event handling after reading data.</title>
<updated>2021-03-05T14:16:17+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-03-05T14:16:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=065a1641b242538073e92065e20fd788203108ab'/>
<id>065a1641b242538073e92065e20fd788203108ab</id>
<content type='text'>
If we need to be notified about further events, ngx_handle_read_event()
needs to be called after a read event is processed.  Without this,
an event can be removed from the kernel and won't be reported again,
notably when using oneshot event methods, such as eventport on Solaris.

For consistency, existing ngx_handle_read_event() call removed from
ngx_mail_read_command(), as this call only covers one of the code paths
where ngx_mail_read_command() returns NGX_AGAIN.  Instead, appropriate
processing added to the callers, covering all code paths where NGX_AGAIN
is returned.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If we need to be notified about further events, ngx_handle_read_event()
needs to be called after a read event is processed.  Without this,
an event can be removed from the kernel and won't be reported again,
notably when using oneshot event methods, such as eventport on Solaris.

For consistency, existing ngx_handle_read_event() call removed from
ngx_mail_read_command(), as this call only covers one of the code paths
where ngx_mail_read_command() returns NGX_AGAIN.  Instead, appropriate
processing added to the callers, covering all code paths where NGX_AGAIN
is returned.
</pre>
</div>
</content>
</entry>
</feed>
