diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2021-05-19 03:13:31 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2021-05-19 03:13:31 +0300 |
commit | 173f16f736c10eae46cd15dd861b04b82d91a37a (patch) | |
tree | a3894096a4859ffe92043d0a10c5230b082a1203 /src/mail/ngx_mail_handler.c | |
parent | 5015209054f68141cd4f5f61e874d4497d4ef49c (diff) | |
download | nginx-173f16f736c10eae46cd15dd861b04b82d91a37a.tar.gz nginx-173f16f736c10eae46cd15dd861b04b82d91a37a.zip |
Mail: max_errors directive.
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.
Diffstat (limited to 'src/mail/ngx_mail_handler.c')
-rw-r--r-- | src/mail/ngx_mail_handler.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c index 57503e9a6..246ba97cf 100644 --- a/src/mail/ngx_mail_handler.c +++ b/src/mail/ngx_mail_handler.c @@ -874,7 +874,20 @@ ngx_mail_read_command(ngx_mail_session_t *s, ngx_connection_t *c) return NGX_MAIL_PARSE_INVALID_COMMAND; } - if (rc == NGX_IMAP_NEXT || rc == NGX_MAIL_PARSE_INVALID_COMMAND) { + if (rc == NGX_MAIL_PARSE_INVALID_COMMAND) { + + s->errors++; + + if (s->errors >= cscf->max_errors) { + ngx_log_error(NGX_LOG_INFO, c->log, 0, + "client sent too many invalid commands"); + s->quit = 1; + } + + return rc; + } + + if (rc == NGX_IMAP_NEXT) { return rc; } |