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';

Reply via email to