summaryrefslogtreecommitdiffstats
path: root/qmail-smtpd.c
diff options
context:
space:
mode:
authorManuel Mausz <manuel@mausz.at>2021-08-16 12:26:46 +0200
committermanuel <manuel@mausz.at>2021-08-16 12:27:42 +0200
commitd13f178cf56e5ae38082abfbd28c68245b774f97 (patch)
tree9b218ebf40354005d233e9e1cb047790aed4ba21 /qmail-smtpd.c
parent8415020b0391fdfb500f95ce6cf30e7628556e3f (diff)
downloadqmail-d13f178cf56e5ae38082abfbd28c68245b774f97.tar.gz
qmail-d13f178cf56e5ae38082abfbd28c68245b774f97.tar.bz2
qmail-d13f178cf56e5ae38082abfbd28c68245b774f97.zip
Require HELO/EHLO before MAIL
Diffstat (limited to 'qmail-smtpd.c')
-rw-r--r--qmail-smtpd.c7
1 files 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
192void err_unimpl(arg) char *arg; { out("502 unimplemented (#5.5.1)\r\n"); do_hard_errors(); } 192void err_unimpl(arg) char *arg; { out("502 unimplemented (#5.5.1)\r\n"); do_hard_errors(); }
193void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); do_hard_errors(); } 193void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); do_hard_errors(); }
194void err_relay() { out("553 we don't relay (#5.7.1)\r\n"); do_hard_errors(); } 194void err_relay() { out("553 we don't relay (#5.7.1)\r\n"); do_hard_errors(); }
195void err_wanthelo() { out("503 HELO/EHLO first (#5.5.1)\r\n"); do_hard_errors(); }
195void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); do_hard_errors(); } 196void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); do_hard_errors(); }
196void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); do_hard_errors(); } 197void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); do_hard_errors(); }
197void err_noop(arg) char *arg; { out("250 ok\r\n"); } 198void err_noop(arg) char *arg; { out("250 ok\r\n"); }
@@ -550,6 +551,7 @@ int addrrelay()
550 return 0; 551 return 0;
551} 552}
552 553
554int seenhelo = 0;
553int seenmail = 0; 555int seenmail = 0;
554int flagbarfbmf; /* defined if seenmail */ 556int flagbarfbmf; /* defined if seenmail */
555int flagbarfbmt; 557int flagbarfbmt;
@@ -678,7 +680,7 @@ void smtp_helo(arg) char *arg;
678{ 680{
679 if(!spp_helo(arg)) return; 681 if(!spp_helo(arg)) return;
680 smtp_greet("250 "); out("\r\n"); 682 smtp_greet("250 "); out("\r\n");
681 seenmail = 0; dohelo(arg); 683 seenmail = 0; seenhelo = 1; dohelo(arg);
682 if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO); 684 if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO);
683} 685}
684void smtp_authout(); 686void smtp_authout();
@@ -709,7 +711,7 @@ void smtp_ehlo(arg) char *arg;
709 smtp_authout(); 711 smtp_authout();
710#endif 712#endif
711 out("250 SIZE "); out(size); out("\r\n"); 713 out("250 SIZE "); out(size); out("\r\n");
712 seenmail = 0; dohelo(arg); 714 seenmail = 0; seenhelo = 1; dohelo(arg);
713 if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO); 715 if (bhelook) flagbarfbhelo = bmcheck(BMCHECK_BHELO);
714} 716}
715void smtp_rset(arg) char *arg; 717void smtp_rset(arg) char *arg;
@@ -720,6 +722,7 @@ void smtp_rset(arg) char *arg;
720} 722}
721void smtp_mail(arg) char *arg; 723void smtp_mail(arg) char *arg;
722{ 724{
725 if (!seenhelo) { err_wanthelo(); return; }
723 if (!addrparse(arg)) { err_syntax(); return; } 726 if (!addrparse(arg)) { err_syntax(); return; }
724 flagsize = 0; 727 flagsize = 0;
725 mailfrom_parms(arg); 728 mailfrom_parms(arg);