summaryrefslogtreecommitdiff
path: root/mail/sendmail-devel/files/patch-srvrsmtp.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/sendmail-devel/files/patch-srvrsmtp.c')
-rw-r--r--mail/sendmail-devel/files/patch-srvrsmtp.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/mail/sendmail-devel/files/patch-srvrsmtp.c b/mail/sendmail-devel/files/patch-srvrsmtp.c
new file mode 100644
index 000000000000..5ffa4eec4dbd
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-srvrsmtp.c
@@ -0,0 +1,92 @@
+--- sendmail/srvrsmtp.c.orig 2019-02-15 10:30:19 UTC
++++ sendmail/srvrsmtp.c
+@@ -878,6 +878,9 @@ smtp(nullserver, d_flags, e)
+ #if _FFR_BADRCPT_SHUTDOWN
+ int n_badrcpts_adj;
+ #endif
++#ifdef USE_BLACKLIST
++ int saved_bl_fd;
++#endif
+
+ RESET_AUTH_FAIL_LOG_USER;
+ SevenBitInput_Saved = SevenBitInput;
+@@ -1377,6 +1380,7 @@ smtp(nullserver, d_flags, e)
+ (int) tp.tv_sec +
+ (tp.tv_usec >= 500000 ? 1 : 0)
+ );
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "pre-greeting traffic");
+ }
+ }
+ }
+@@ -1479,6 +1483,10 @@ smtp(nullserver, d_flags, e)
+ SmtpPhase = "server cmd read";
+ sm_setproctitle(true, e, "server %s cmd read", CurSmtpClient);
+
++#ifdef USE_BLACKLIST
++ saved_bl_fd = dup(sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL));
++#endif
++
+ /* handle errors */
+ if (sm_io_error(OutChannel) ||
+ (p = sfgets(inp, sizeof(inp), InChannel,
+@@ -1792,8 +1800,11 @@ smtp(nullserver, d_flags, e)
+ #define LOGAUTHFAIL \
+ do \
+ { \
++ int fd; \
+ SET_AUTH_USER_CONDITIONALLY \
+ message("535 5.7.0 authentication failed"); \
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL); \
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "AUTH FAIL"); \
+ if (LogLevel >= 9) \
+ sm_syslog(LOG_WARNING, e->e_id, \
+ "AUTH failure (%s): %s (%d) %s%s%.*s, relay=%.100s", \
+@@ -1943,6 +1954,9 @@ smtp(nullserver, d_flags, e)
+ DELAY_CONN("AUTH");
+ if (!sasl_ok || n_mechs <= 0)
+ {
++ int fd;
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "AUTH LOGIN FAIL");
+ message("503 5.3.3 AUTH not available");
+ break;
+ }
+@@ -3546,10 +3560,17 @@ doquit:
+ ** timeouts for the same connection.
+ */
+
++#ifdef USE_BLACKLIST
++ /* no immediate BLACKLIST_ABUSIVE_BEHAVIOR */
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, saved_bl_fd, "no command issued");
++#endif
+ sm_syslog(LOG_INFO, e->e_id,
+ "%s did not issue MAIL/EXPN/VRFY/ETRN during connection to %s",
+ CurSmtpClient, d);
+ }
++#ifdef USE_BLACKLIST
++ close(saved_bl_fd);
++#endif
+ if (tTd(93, 100))
+ {
+ /* return to handle next connection */
+@@ -3607,7 +3628,10 @@ doquit:
+ #if MAXBADCOMMANDS > 0
+ if (++n_badcmds > MAXBADCOMMANDS)
+ {
++ int fd;
+ stopattack:
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_ABUSIVE_BEHAVIOR, fd, "too many bad commands");
+ message("421 4.7.0 %s Too many bad commands; closing connection",
+ MyHostName);
+
+@@ -3659,6 +3683,9 @@ doquit:
+ #if SASL
+ }
+ #endif
++#ifdef USE_BLACKLIST
++ close(saved_bl_fd);
++#endif
+ }
+ SM_EXCEPT(exc, "[!F]*")
+ {