From d13f178cf56e5ae38082abfbd28c68245b774f97 Mon Sep 17 00:00:00 2001 From: Manuel Mausz Date: Mon, 16 Aug 2021 12:26:46 +0200 Subject: Require HELO/EHLO before MAIL --- qmail-smtpd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/qmail-smtpd.c b/qmail-smtpd.c index 20027b0..b722ee4 100644 --- a/qmail-smtpd.c +++ b/qmail-smtpd.c @@ -192,6 +192,7 @@ void err_badbounce() { out("550 sorry, bounce messages should have a single enve void err_unimpl(arg) char *arg; { out("502 unimplemented (#5.5.1)\r\n"); do_hard_errors(); } void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); do_hard_errors(); } void err_relay() { out("553 we don't relay (#5.7.1)\r\n"); do_hard_errors(); } +void err_wanthelo() { out("503 HELO/EHLO first (#5.5.1)\r\n"); do_hard_errors(); } void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); do_hard_errors(); } void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); do_hard_errors(); } void err_noop(arg) char *arg; { out("250 ok\r\n"); } @@ -550,6 +551,7 @@ int addrrelay() return 0; } +int seenhelo = 0; int seenmail = 0; int flagbarfbmf; /* defined if seenmail */ int flagbarfbmt; @@ -678,7 +680,7 @@ void smtp_helo(arg) char *arg; { if(!spp_helo(arg)) return; smtp_greet("250 "); out("\r\n"); - seenmail = 0; dohelo(arg); + seenmail = 0; seenhelo = 1; dohelo(arg); if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO); } void smtp_authout(); @@ -709,7 +711,7 @@ void smtp_ehlo(arg) char *arg; smtp_authout(); #endif out("250 SIZE "); out(size); out("\r\n"); - seenmail = 0; dohelo(arg); + seenmail = 0; seenhelo = 1; dohelo(arg); if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO); } void smtp_rset(arg) char *arg; @@ -720,6 +722,7 @@ void smtp_rset(arg) char *arg; } void smtp_mail(arg) char *arg; { + if (!seenhelo) { err_wanthelo(); return; } if (!addrparse(arg)) { err_syntax(); return; } flagsize = 0; mailfrom_parms(arg); -- cgit v1.2.3