diff options
| author | Manuel Mausz <manuel@mausz.at> | 2021-08-16 12:26:46 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2021-08-16 12:27:42 +0200 |
| commit | d13f178cf56e5ae38082abfbd28c68245b774f97 (patch) | |
| tree | 9b218ebf40354005d233e9e1cb047790aed4ba21 | |
| parent | 8415020b0391fdfb500f95ce6cf30e7628556e3f (diff) | |
| download | qmail-d13f178cf56e5ae38082abfbd28c68245b774f97.tar.gz qmail-d13f178cf56e5ae38082abfbd28c68245b774f97.tar.bz2 qmail-d13f178cf56e5ae38082abfbd28c68245b774f97.zip | |
Require HELO/EHLO before MAIL
| -rw-r--r-- | qmail-smtpd.c | 7 |
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 | |||
| 192 | void err_unimpl(arg) char *arg; { out("502 unimplemented (#5.5.1)\r\n"); do_hard_errors(); } | 192 | void err_unimpl(arg) char *arg; { out("502 unimplemented (#5.5.1)\r\n"); do_hard_errors(); } |
| 193 | void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); do_hard_errors(); } | 193 | void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); do_hard_errors(); } |
| 194 | void err_relay() { out("553 we don't relay (#5.7.1)\r\n"); do_hard_errors(); } | 194 | void err_relay() { out("553 we don't relay (#5.7.1)\r\n"); do_hard_errors(); } |
| 195 | void err_wanthelo() { out("503 HELO/EHLO first (#5.5.1)\r\n"); do_hard_errors(); } | ||
| 195 | void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); do_hard_errors(); } | 196 | void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); do_hard_errors(); } |
| 196 | void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); do_hard_errors(); } | 197 | void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); do_hard_errors(); } |
| 197 | void err_noop(arg) char *arg; { out("250 ok\r\n"); } | 198 | void 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 | ||
| 554 | int seenhelo = 0; | ||
| 553 | int seenmail = 0; | 555 | int seenmail = 0; |
| 554 | int flagbarfbmf; /* defined if seenmail */ | 556 | int flagbarfbmf; /* defined if seenmail */ |
| 555 | int flagbarfbmt; | 557 | int 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 | } |
| 684 | void smtp_authout(); | 686 | void 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 | } |
| 715 | void smtp_rset(arg) char *arg; | 717 | void smtp_rset(arg) char *arg; |
| @@ -720,6 +722,7 @@ void smtp_rset(arg) char *arg; | |||
| 720 | } | 722 | } |
| 721 | void smtp_mail(arg) char *arg; | 723 | void 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); |
