The attached patch sets a new length for SMTP response lines and makes the
length configurable at the same time.
It became necessary to develop this patch, to store (and not truncate) SMTP
responses when multiple virus scanners detect malware and all report the
finding and the overall length exceeds the (old) SMTP response length.
In this case only a truncated string would be written to the datebase, which
made it impossible to come up with complete reporting.
p@rick
--
[*] sys4 AG
https://sys4.de, +49 (89) 30 90 46 64
Schleißheimer Straße 26/MG,80333 München
Sitz der Gesellschaft: München, Amtsgericht München: HRB 199263
Vorstand: Patrick Ben Koetter, Marc Schiffbauer, Wolfgang Stief
Aufsichtsratsvorsitzender: Florian Kirstein
--- amavisd-new-2.11.0/amavisd 2016-04-26 21:24:33.000000000 +0200
+++ amavis-patched/amavisd 2018-07-11 16:27:29.603420699 +0200
@@ -388,6 +388,8 @@
@listen_sockets $inet_socket_port $inet_socket_bind $listen_queue_size
$smtpd_recipient_limit $unix_socketname $unix_socket_mode
$smtp_connection_cache_on_demand $smtp_connection_cache_enable
+ $enable_long_smtp_resp
+ $long_smtp_resp_length
%smtp_tls_client_options %smtpd_tls_server_options
$smtpd_tls_cert_file $smtpd_tls_key_file
$enforce_smtpd_message_size_limit_64kb_min
@@ -990,6 +992,10 @@
$smtpd_recipient_limit = 1100; # max recipients (RCPT TO) - sanity limit
+# $enable_long_smtp_resp = 1; # allow longer smtp responses to be logged to
database
+ # length limit of longer smtp responses
+ $long_smtp_resp_length = 255; # changing this value must be in accordance
with database
+
# $myhostname is used by SMTP server module in the initial SMTP welcome line,
# in inserted Received: lines, Message-ID in notifications, log entries, ...
$myhostname = (POSIX::uname)[1]; # should be a FQDN !
@@ -27472,7 +27478,8 @@
my $r_content_type =
$r->setting_by_contents_category(\%ccat_short_name);
for ($r_content_type) { $_ = ' ' if !defined $_ || /^ *\z/ }
- substr($resp,255) = '' if length($resp) > 255;
+ my $respmaxlength=($enable_long_smtp_resp ? $long_smtp_resp_length :
255);
+ substr($resp,$respmaxlength) = '' if length($resp) > $respmaxlength;
$resp =~ s/[^\040-\176]/?/gs; # just in case, only need 7 bit printbl
# avoid op '?:' on tainted operand in args list, see PR [perl #81028]
my $recip_local_yn = $r->recip_is_local ? 'Y' : 'N';