Commit Graph

38 Commits

Author SHA1 Message Date
Maxim Dounin
065a1641b2 Mail: added missing event handling after reading data.
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.
2021-03-05 17:16:17 +03:00
Maxim Dounin
8ed63c936c Mail: added missing event handling after blocking events.
As long as a read event is blocked (ignored), ngx_handle_read_event()
needs to be called to make sure no further notifications will be
triggered when using level-triggered event methods, such as select() or
poll().
2021-03-05 17:16:16 +03:00
Maxim Dounin
abe660636c Mail: fixed duplicate resolving.
When using SMTP with SSL and resolver, read events might be enabled
during address resolving, leading to duplicate ngx_mail_ssl_handshake_handler()
calls if something arrives from the client, and duplicate session
initialization - including starting another resolving.  This can lead
to a segmentation fault if the session is closed after first resolving
finished.  Fix is to block read events while resolving.

Reported by Robert Norris,
http://mailman.nginx.org/pipermail/nginx/2019-July/058204.html.
2019-08-01 13:50:07 +03:00
Sergey Kandaurov
b5a3cc3781 Mail: make it possible to disable SASL EXTERNAL. 2017-01-12 19:22:03 +03:00
Rob N ★
66c23edf63 Mail: support SASL EXTERNAL (RFC 4422).
This is needed to allow TLS client certificate auth to work. With
ssl_verify_client configured, the auth daemon can choose to allow the
connection to proceed based on the certificate data.

This has been tested with Thunderbird for IMAP only. I've not yet found a
client that will do client certificate auth for POP3 or SMTP, and the method is
not really documented anywhere that I can find. That said, its simple enough
that the way I've done is probably right.
2016-10-08 18:05:00 +11:00
Ruslan Ermilov
7ad57da598 Style. 2016-03-30 11:52:16 +03:00
Maxim Dounin
44f45a5466 Mail: discard pipelined commands after SMTP STARTTLS.
The bug had appeared in nginx 1.5.6 (04e43d03e153).

Reported by Chris Boulton.
2014-08-05 12:22:07 +04:00
Maxim Dounin
ca02a1020c Mail: added a check for the number of arguments in MAIL/RCPT.
Missed during introduction of the SMTP pipelining support (04e43d03e153,
1.5.6).  Previously, the check wasn't needed as s->buffer was used directly
and the number of arguments didn't matter.

Reported by Svyatoslav Nikolsky.
2014-05-21 21:56:20 +04:00
Ruslan Ermilov
769eded732 Resolver: implemented IPv6 name to address resolving. 2013-12-09 10:53:28 +04:00
Ruslan Ermilov
3aeefbcaea Changed resolver API to use ngx_addr_t. 2013-12-06 14:30:27 +04:00
Maxim Dounin
4f6f653f48 Mail: smtp pipelining support.
Basically, this does the following two changes (and corresponding
modifications of related code):

1. Does not reset session buffer unless it's reached it's end, and always
wait for LF to terminate command (even if we detected invalid command).

2. Record command name to make it available for handlers (since now we
can't assume that command starts from s->buffer->start).
2013-09-30 22:09:57 +04:00
Maxim Dounin
32d6035303 Mail: added session close on smtp_greeting_delay violation.
A server MUST send greeting before other replies, while before this
change in case of smtp_greeting_delay violation the 220 greeting was
sent after several 503 replies to commands received before greeting,
resulting in protocol synchronization loss.  Moreover, further commands
were accepted after the greeting.

While closing a connection isn't strictly RFC compliant (RFC 5321
requires servers to wait for a QUIT before closing a connection), it's
probably good enough for practial uses.
2013-09-30 22:09:50 +04:00
Maxim Konovalov
f8d59e33f3 Copyright updated. 2012-01-18 15:07:43 +00:00
Igor Sysoev
05b1a8f1e3 ngx_str_set() and ngx_str_null() 2010-05-14 09:56:37 +00:00
Igor Sysoev
a59ba33060 *) fix resolving an empty name ("."),
*) add quotes in an error message,
*) backout r3299 in ngx_mail_smtp_handler.c
2009-11-09 19:15:11 +00:00
Igor Sysoev
70966c154f fix "PTR ." case in address resolver 2009-11-09 18:04:05 +00:00
Igor Sysoev
610cbd4223 mail proxy listen IPv6 support 2009-05-18 12:20:22 +00:00
Igor Sysoev
09f6cd5fa9 compatibility with Microsoft's
AUTH LOGIN [base64 encoded user name ]
patch by Maxim Dounin
2009-02-09 12:03:55 +00:00
Igor Sysoev
bd5c23ee0a avoid deep nested calls, flatten call tree 2009-01-31 20:34:26 +00:00
Igor Sysoev
c9aae14a7e use "!= NGX_OK" instead of "== NGX_ERROR" 2008-12-09 17:27:48 +00:00
Igor Sysoev
d0e8e5456c smtp_auth none
patch by Maxim Dounin
2008-11-13 13:25:34 +00:00
Igor Sysoev
7f6b2ffc60 *) back out r2040
*) refactor ngx_palloc()
*) introduce ngx_pnalloc()
*) additional pool blocks have smaller header
2008-06-17 15:00:30 +00:00
Igor Sysoev
5fa1146dd5 do not resolve SMTP clients by default 2008-02-16 13:46:33 +00:00
Igor Sysoev
45450461b6 resolver in smtp proxy module 2008-02-13 13:50:04 +00:00
Igor Sysoev
09085e3b38 fix STARTTLS prompt in SMTP 2007-12-21 10:24:59 +00:00
Igor Sysoev
86ef6aaa6b move condition declarations inside blocks where they are used 2007-12-10 12:09:51 +00:00
Igor Sysoev
964c4a8c9a use "_" instead of " " as new line substitute, do not delete trailing new line 2007-09-21 13:47:33 +00:00
Igor Sysoev
48714085dd ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module 2007-09-15 16:51:16 +00:00
Igor Sysoev
05a75d0d94 style fix: remove trailing spaces 2007-09-14 15:04:45 +00:00
Igor Sysoev
945af2aac9 create salt just before it will be used 2007-09-14 15:00:19 +00:00
Igor Sysoev
c95d44bb73 fix r1482 2007-09-14 14:56:46 +00:00
Igor Sysoev
dac63a2f28 ngx_mail_smtp_create_buffer() 2007-09-14 14:13:25 +00:00
Igor Sysoev
2422950571 optimizations 2007-09-14 14:04:24 +00:00
Igor Sysoev
711c36b825 smtp_client_buffer and smtp_greeting_delay 2007-09-14 13:58:49 +00:00
Igor Sysoev
706ab65f54 move event handling to protocol specific code,
it is required to support SMTP greeting delay
2007-09-14 10:42:19 +00:00
Igor Sysoev
5fbe12146e optimizations 2007-09-13 21:24:27 +00:00
Igor Sysoev
c4cb0c7cf1 style fix and optimizations 2007-09-13 20:27:28 +00:00
Igor Sysoev
6cc54cc3be split pop3, imap, and smtp handlers 2007-09-13 20:13:18 +00:00