aboutsummaryrefslogtreecommitdiff
path: root/src/mail/ngx_mail_handler.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2021-05-19 03:13:31 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2021-05-19 03:13:31 +0300
commit173f16f736c10eae46cd15dd861b04b82d91a37a (patch)
treea3894096a4859ffe92043d0a10c5230b082a1203 /src/mail/ngx_mail_handler.c
parent5015209054f68141cd4f5f61e874d4497d4ef49c (diff)
downloadnginx-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.c15
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;
}