[Amavisd-new-commits] [pkg-amavisd-new] 06/16: Imported Upstream version 2.9.1

Alexander Wirt formorer at debian.org
Sun Oct 26 07:38:35 UTC 2014


This is an automated email from the git hooks/post-receive script.

formorer pushed a commit to branch master
in repository pkg-amavisd-new.

commit c230541e2381e95c108107eedbaf1148932f8784
Author: Alexander Wirt <formorer at debian.org>
Date:   Thu Jul 17 21:56:00 2014 +0200

    Imported Upstream version 2.9.1
---
 RELEASE_NOTES             |  42 +++++++
 amavisd                   | 292 +++++++++++++++++++++++++++-------------------
 amavisd-new-courier.patch |  22 ++--
 amavisd-new-qmqpqq.patch  |  26 ++---
 4 files changed, 240 insertions(+), 142 deletions(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 800a59b..24a69bb 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,4 +1,46 @@
 ---------------------------------------------------------------------------
+                                                              June 27, 2014
+amavisd-new-2.9.1 release notes
+
+Contents:
+  COMPATIBILITY
+  BUG FIXES
+  OTHER
+
+
+COMPATIBILITY
+
+There are no known incompatibilities between versions 2.9.0 and 2.9.1.
+
+
+BUG FIXES
+
+- when a $final_bad_header_destiny is set to D_BOUNCE and a mail
+  message was a DSN or coming from a mailing list, spam checks were
+  inappropriately skipped (logged as: "bypassing of spam checks,
+  message will be blocked anyway", which was not true as the blocking
+  was overruled at a later stage); reported by Bruce Pennypacker;
+
+- perl 5.20.0 may occasionally report:
+    "Malformed UTF-8 character (unexpected end of string)"
+  due to a bug in perl [perl #122148].  Treat this error as non-fatal
+  and only log a warning in two such cases: when SpamAssassin is called
+  as a spawned subprocess ($sa_spawned=1) and is returning a result
+  to a parent process, or when constructing a structured report.
+
+
+OTHER
+
+- updated decoding of RAR archives to recognize a changed format in output
+  of 'unrar' utility version 5; based on a patch by amavis17(at)iotti.biz
+
+- avoid tempfailing a message if a redis server is down, just log the
+  error and carry on;
+
+- some minor logging changes to facilitate troubleshooting;
+
+
+---------------------------------------------------------------------------
                                                                 May 9, 2014
 amavisd-new-2.9.0 release notes
 
diff --git a/amavisd b/amavisd
index f721756..8d2a2e1 100755
--- a/amavisd
+++ b/amavisd
@@ -132,7 +132,7 @@
 #  Amavis::Tools
 #------------------------------------------------------------------------------
 
-use sigtrap qw(stack-trace BUS SEGV EMT FPE ILL SYS);
+use sigtrap qw(stack-trace BUS SEGV EMT FPE ILL SYS TRAP ABRT);
 
 use strict;
 use re 'taint';
@@ -284,7 +284,7 @@ use constant CC_VIRUS     => 9;
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   %EXPORT_TAGS = (
     'dynamic_confvars' =>  # per- policy bank settings
@@ -676,7 +676,7 @@ BEGIN {  # init_primary: version, $unicode_aware, base policy bank
   $myprogram_name = $0;  # typically 'amavisd'
   local $1; $myprogram_name =~ s{([^/]*)\z}{$1}s;
   $myproduct_name = 'amavisd-new';
-  $myversion_id = '2.9.0'; $myversion_date = '20140509';
+  $myversion_id = '2.9.1'; $myversion_date = '20140627';
 
   $myversion = "$myproduct_name-$myversion_id ($myversion_date)";
   $myversion_id_numeric =  # x.yyyzzz, allows numerical compare, like Perl $]
@@ -2235,7 +2235,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&init &amavis_log_id &collect_log_stats
                   &log_to_stderr &log_fd &open_log &close_log &write_log);
@@ -2439,7 +2439,7 @@ use re 'taint';
 
 BEGIN {
   use vars qw(@ISA $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   import Amavis::Conf qw(:platform $TEMPBASE);
   import Amavis::Log qw(write_log);
 }
@@ -2536,7 +2536,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&init &section_time &report &get_time_so_far
                   &get_rusage &rusage_report);
@@ -2691,7 +2691,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&untaint &untaint_inplace &min &max &minmax
                   &unique_list &unique_ref &format_time_interval
@@ -3421,7 +3421,10 @@ sub fmt_struct($) {
 #
 sub st_encode($) {
   my $str = $_[0]; local($1);
-  $str =~ s/([%~\000\200])/sprintf('%%%02X',ord($1))/egs;
+  { # concession on a perl 5.20.0 bug [perl #122148] - just warn, do not abort
+    use warnings NONFATAL => qw(utf8);
+    $str =~ s/([%~\000\200])/sprintf('%%%02X',ord($1))/egs;
+  };
   $str;
 }
 
@@ -3590,6 +3593,9 @@ sub rmdir_recursively($;$) {
         last;
       }
     }
+    # perl5.20: readdir() now only sets $! on error.  $! is no longer
+    # set to EBADF when then terminating undef is read from the directory
+    # unless the system call sets $!. [perl #118651]
     closedir(DIR) or die "Error closing directory $dir: $!";
     my $cntf = scalar(@rmfiles);
     for my $f (@rmfiles) {
@@ -3972,7 +3978,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&boolean &numeric);
 }
@@ -4015,8 +4021,11 @@ sub encode($) {
     # fall through, encode other refs as strings, helps debugging
   }
   return 'null' if !defined $val;
-  $val =~ s{ ([\x00-\x1f\x7f\x{2028}\x{2029}"\\]) }
-           { exists $jesc{$1} ? $jesc{$1} : sprintf('\\u%.4X',ord($1)) }xgse;
+  { # concession on a perl 5.20.0 bug [perl #122148] - just warn, do not abort
+    use warnings NONFATAL => qw(utf8);
+    $val =~ s{ ([\x00-\x1f\x7f\x{2028}\x{2029}"\\]) }
+             { exists $jesc{$1} ? $jesc{$1} : sprintf('\\u%.4X',ord($1)) }xgse;
+  };
   return '"' . $val . '"';
 }
 
@@ -4030,7 +4039,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&exit_status_str &proc_status_ok &kill_proc &cloexec
                   &run_command &run_command_consumer &run_as_subprocess
@@ -4577,7 +4586,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(
     &rfc2822_timestamp &rfc2822_utc_timestamp
@@ -5389,6 +5398,8 @@ sub wrap_smtp_resp($) {
 #
 sub one_response_for_all($$;$) {
   my($msginfo, $dsn_per_recip_capable, $suppressed) = @_;
+  do_log(5, 'one_response_for_all, per_recip_capable: %s, suppressed: %s',
+            $dsn_per_recip_capable?'Y':'N', $suppressed?'Y':'N');
   my($smtp_resp, $exit_code, $ndn_needed);
   my $am_id          = $msginfo->log_id;
   my $sender         = $msginfo->sender;
@@ -5519,7 +5530,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Util qw(ll do_log fmt_struct);
 }
@@ -5642,7 +5653,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION $have_patricia);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&lookup_ip_acl &ip_to_vec &normalize_ip_addr);
   import Amavis::Util qw(ll do_log);
@@ -6129,7 +6140,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&lookup &lookup2 &lookup_hash &lookup_acl);
   import Amavis::Util qw(ll do_log fmt_struct unique_list);
@@ -6417,7 +6428,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&expand &tokenize);
   import Amavis::Util qw(ll do_log);
@@ -6719,7 +6730,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Timing qw(section_time);
@@ -7254,7 +7265,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
 }
 use Errno qw(EIO);
@@ -7390,7 +7401,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform);
   import Amavis::Util qw(ll do_log min max minmax);
@@ -7870,7 +7881,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
 }
 
@@ -7904,7 +7915,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform);
   import Amavis::Util qw(setting_by_given_contents_category_all
@@ -8095,7 +8106,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform);
   import Amavis::rfc2821_2822_Tools qw(rfc2822_timestamp quote_rfc2821_local
@@ -8415,7 +8426,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&hdr);
   import Amavis::Conf qw(:platform c cr ca);
@@ -8728,7 +8739,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(&mail_dispatch);
   import Amavis::Conf qw(:platform :confvars c cr ca);
@@ -8882,7 +8893,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&first_received_from &oldest_public_ip_addr_from_received);
   import Amavis::Conf qw(:platform c cr ca);
@@ -8934,7 +8945,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&consumed_bytes);
   import Amavis::Conf qw(c cr ca
@@ -9023,7 +9034,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Util qw(ll do_log);
 }
@@ -9111,7 +9122,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter MIME::Parser::Filer);  # subclass of MIME::Parser::Filer
 }
 # This package will be used by mime_decode().
@@ -9153,7 +9164,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&check_header_validity &check_for_banned_names);
   import Amavis::Util qw(ll do_log min max minmax untaint untaint_inplace
@@ -9456,7 +9467,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&mime_decode);
   import Amavis::Conf qw(:platform c cr ca $TEMPBASE $MAXFILES);
@@ -9685,7 +9696,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter MIME::Body);  # subclass of MIME::Body
   import Amavis::Util qw(ll do_log);
 }
@@ -9750,7 +9761,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&delivery_status_notification &delivery_short_report
                   &build_mime_entity &defanged_mime_entity
@@ -10275,8 +10286,7 @@ sub delivery_status_notification($$$;$$$$) {  # ..._or_report
                 $spam_level, $dsn_cutoff_level,
                 !$is_credible ? '' : ", (credible: $is_credible)",
                 $sender, $recip);
-    } elsif (defined($msginfo->is_bulk) &&
-             ccat_maj($r->contents_category) > CC_CLEAN) {
+    } elsif ($msginfo->is_bulk && ccat_maj($r->contents_category) > CC_CLEAN) {
       $suppressed = 1;
       do_log(3, "DSN: FILTER %s %s, suppressed, bulk mail (%s), <%s> -> <%s>",
                 $smtp_resp_code,$ccat_name,$msginfo->is_bulk,$sender,$recip);
@@ -10537,6 +10547,8 @@ sub delivery_status_notification($$$;$$$$) {  # ..._or_report
     my $notif_m = c('notify_method');
     $_->delivery_method($notif_m)  for @{$notification->per_recip_data};
   }
+  do_log(5, 'delivery_status_notification: notif %d bytes, suppressed: %s',
+            length($notification), $suppressed ? 'yes' : 'no');
   # $suppressed is true if DNS would be needed, but either the sender requested
   #   that DSN is not to be sent, or it is believed the bounce would not reach
   #   the correct sender (faked sender with viruses or spam);
@@ -10920,7 +10932,7 @@ use re 'taint';
 
 BEGIN {
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   import Amavis::Conf qw(:platform :sa :confvars c cr ca);
   import Amavis::Util qw(untaint untaint_inplace
                          min max minmax unique_list unique_ref
@@ -12620,11 +12632,17 @@ sub generate_unique_mail_id($) {
     $msginfo->mail_id($mail_id);  # assign a long-term unique id to the msg
 
     my $is_unique = 1;
+    # don't bother to save info on incoming messages - saves Redis storage
+    # while still offering necessary data for a penpals function
     if ($redis_storage && $msginfo->originating) {
-      # attempt to save a message placeholder to Redis, ensuring it is unique;
-      # don't bother to save info on incoming messages, saves Redis storage
-      # while still offering necessary data for a penpals function
-      $redis_storage->save_info_preliminary($msginfo) or ($is_unique=0);
+      # attempt to save a message placeholder to Redis, ensuring it is unique
+      eval {
+        $redis_storage->save_info_preliminary($msginfo) or ($is_unique=0);
+        1;
+      } or do {
+        chomp $@;
+        do_log(-1, 'storing preliminary info to redis failed: %s', $@);
+      };
     }
     if ($is_unique && $sql_storage) {
       # attempt to save a message placeholder to SQL, ensuring it is unique
@@ -12633,12 +12651,11 @@ sub generate_unique_mail_id($) {
     last if $is_unique;
 
     if (--$attempt <= 0) {
-      do_log(-2,"ERROR sql_storage: too many retries ".
-                "on storing preliminary, info not saved");
+      do_log(-2,'too many retries on storing preliminary, info not saved');
       last;
     } else {
       snmp_count('GenMailIdRetries');
-      do_log(2,"storage: retrying preliminary, %d attempts remain", $attempt);
+      do_log(2,'retrying storing preliminary, %d attempts remain', $attempt);
       sleep(int(1+rand(3)));
       add_entropy(Time::HiRes::gettimeofday, $attempt);
     }
@@ -12846,9 +12863,9 @@ sub collect_some_info($) {
   $is_mlist = 1  if defined $is_mlist && !$is_mlist;  # make sure it is true
   $is_auto  = 1  if defined $is_auto  && !$is_auto;   # make sure it is true
   $is_bulk  = 1  if defined $is_bulk  && !$is_bulk;   # make sure it is true
-  $msginfo->is_mlist($is_mlist)  if defined $is_mlist;
-  $msginfo->is_auto($is_auto)    if defined $is_auto;
-  $msginfo->is_bulk($is_bulk)    if defined $is_bulk;
+  $msginfo->is_mlist($is_mlist)  if $is_mlist;
+  $msginfo->is_auto($is_auto)    if $is_auto;
+  $msginfo->is_bulk($is_bulk)    if $is_bulk;
 
   # now that we have a parsed From, check if we have a valid
   # author domain signature and do other DKIM pre-processing
@@ -13482,6 +13499,10 @@ sub check_mail($$) {
           } elsif (defined($lovers_map_ref) &&
                    lookup2(0, $recip, $lovers_map_ref, Label => 'Lovers1')) {
             $fd = D_PASS;  # D_PASS for content lovers
+          } elsif ($fd == D_BOUNCE && ($sender eq '' || $msginfo->is_bulk) &&
+                   ccat_maj($cc) == CC_BADH) {
+            # have mercy on bad header section from mailing lists and in DSN
+            $fd = D_PASS;  # change D_BOUNCE to D_PASS for CC_BADH
           } else {  # $fd != D_PASS, blocked
             $prelim_blocking_ccat = $cc; $final_destiny = $fd;
             last;
@@ -13796,35 +13817,39 @@ sub check_mail($$) {
                                   : lookup2(0, $recip, $fd_map_ref,
                                             Label => 'Destiny2');
         if (!defined $fd || $fd == D_PASS) {
-          ll(5) && do_log(5, "final_destiny (ccat=%s) is PASS, recip %s",
+          ll(5) && do_log(5, 'final_destiny (ccat=%s) is PASS, recip %s',
                              $cc, $recip);
           $fd = D_PASS;  # keep D_PASS
         } elsif (defined($lovers_map_ref) &&
                  lookup2(0, $recip, $lovers_map_ref, Label => 'Lovers2')) {
-          ll(5) && do_log(5, "contents lover (ccat=%s) %s", $cc, $recip);
+          ll(5) && do_log(5, 'contents lover (ccat=%s), '.
+                             'changing final_destiny %d to PASS, recip %s',
+                             $cc, $fd, $recip);
           $fd = D_PASS;  # change to D_PASS for content lovers
-        } elsif ($fd == D_BOUNCE &&
-                 ($sender eq '' || defined($msginfo->is_bulk)) &&
+        } elsif ($fd == D_BOUNCE && ($sender eq '' || $msginfo->is_bulk) &&
                  ccat_maj($cc) == CC_BADH) {
           # have mercy on bad header section in mail from mailing lists and
           # in DSN: since a bounce for such mail will be suppressed, it is
           # probably better to just let a mail with a bad header section pass,
           # it is rather innocent
           my $is_bulk = $msginfo->is_bulk;
-          do_log(1, "allow bad header section from %s<%s> -> <%s>: %s",
-            !defined($is_bulk) ? '' : "($is_bulk) ",
-            $sender, $recip, $bad_headers[0]);
+          do_log(1, 'allow bad header section from %s<%s> -> <%s>: %s, '.
+                    'changing final_destiny %d to PASS',
+            !$is_bulk ? '' : "($is_bulk) ",
+            $sender, $recip, $bad_headers[0], $fd);
           $fd = D_PASS;  # change D_BOUNCE to D_PASS for CC_BADH
         } else {  # $fd != D_PASS, blocked
           $blocking_ccat = $cc; $final_destiny = $fd;
           my $cc_main = $r->contents_category;
           $cc_main = $cc_main->[0]  if $cc_main;
           if ($blocking_ccat eq $cc_main) {
-            do_log(3, "blocking contents category is (%s) for %s",
-                      $blocking_ccat,$recip);
+            do_log(3, 'blocking contents category is (%s) for %s, '.
+                      'final_destiny %d',
+                      $blocking_ccat, $recip, $fd);
           } else {
-            do_log(3, "blocking ccat (%s) differs from ccat_maj=%s, %s",
-                      $blocking_ccat,$cc_main,$recip);
+            do_log(3, 'blocking ccat (%s) differs from ccat_maj=%s, %s, '.
+                      'final_destiny %d',
+                      $blocking_ccat, $cc_main, $recip, $fd);
           }
           last;  # first blocking wins, also skips turning on mangling
         }
@@ -14535,7 +14560,7 @@ sub check_mail($$) {
       eval {
         $redis_storage->save_info_final($msginfo,$report_ref); 1;
       } or do {
-        chomp $@; do_log(-1, "redis: save final information failed: %s", $@);
+        chomp $@; do_log(-1, 'save_info_final failed, Redis error: %s', $@);
       };
       section_time($which_section);
     }
@@ -14656,14 +14681,14 @@ sub check_mail($$) {
         # structured_report returns a string as perl characters (not octets)
         $report_ref = structured_report($msginfo); 1;
       } or do {
-        chomp $@; do_log(-1, "structured_report failed: %s", $@);
+        chomp $@; do_log(-1, 'structured_report failed: %s', $@);
       };
     }
     eval {
       $redis_storage->save_structured_report($report_ref,
         c('redis_logging_key'), $redis_logging_queue_size_limit); 1;
     } or do {
-      chomp $@; do_log(-1, "redis: save structured report: %s", $@);
+      chomp $@; do_log(-1, 'save_structured_report failed: %s', $@);
     };
   }
   $zmq_obj->register_proc(1,0,'.')  if $zmq_obj;  # content checking done
@@ -15039,7 +15064,7 @@ sub build_and_save_structured_report($;$) {
         c('redis_logging_key'), $redis_logging_queue_size_limit);
       1;
     } or do {
-      chomp $@; do_log(-1,"structured report failed: %s", $@);
+      chomp $@; do_log(-1, 'save_structured_report failed: %s', $@);
     };
   }
 }
@@ -18364,7 +18389,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform $myversion $myhostname
                          $nanny_details_level);
@@ -18626,7 +18651,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform $myversion $myhostname
                          $nanny_details_level);
@@ -18884,7 +18909,7 @@ use warnings FATAL => qw(utf8 void);
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw($db_home $daemon_chroot_dir);
   import Amavis::Util qw(untaint ll do_log);
@@ -18973,7 +18998,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Util qw(ll do_log);
   import Amavis::Conf qw($trim_trailing_space_in_lookup_result_fields);
@@ -19098,7 +19123,7 @@ use warnings FATAL => qw(utf8 void);
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Timing qw(section_time);
@@ -19319,7 +19344,7 @@ BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION
               $have_sasl $ldap_sys_default);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   $have_sasl = eval { require Authen::SASL };
   import Amavis::Conf qw(:platform :confvars c cr ca);
@@ -19541,7 +19566,7 @@ use re 'taint';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Util qw(ll do_log);
   import Amavis::Conf qw($trim_trailing_space_in_lookup_result_fields);
@@ -19666,7 +19691,7 @@ BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION
               $ldap_sys_default @ldap_attrs @mv_ldap_attrs);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Timing qw(section_time);
@@ -19879,7 +19904,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Util qw(ll do_log debug_oneshot dump_captured_log
@@ -20556,7 +20581,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Util qw(ll do_log do_log_safe untaint
@@ -21816,7 +21841,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform);
   import Amavis::Util qw(ll do_log min max minmax);
@@ -22016,7 +22041,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&rundown_stale_sessions);
   import Amavis::Conf qw(:platform c cr ca $smtp_connection_cache_enable);
@@ -22380,7 +22405,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(&mail_via_smtp);
   import Amavis::Conf qw(:platform c cr ca $smtp_connection_cache_enable);
@@ -23118,7 +23143,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(&mail_via_pipe);
   import Amavis::Conf qw(:platform c cr ca);
@@ -23322,7 +23347,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(&mail_via_bsmtp);
   import Amavis::Conf qw(:platform $QUARANTINEDIR c cr ca);
@@ -23520,7 +23545,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&mail_to_local_mailbox);
   import Amavis::Conf qw(:platform c cr ca
@@ -23888,7 +23913,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform);
   import Amavis::Util qw(ll do_log);
@@ -24194,7 +24219,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::rfc2821_2822_Tools;
@@ -24344,7 +24369,7 @@ sub penpals_find {
   } or do {  # Lua function probably not cached, define again and re-try
     if ($@ !~ /^NOSCRIPT/) {
       $self->disconnect; undef $result; chomp $@;
-      do_log(-1, "Redis Lua error: %s", $@);
+      do_log(-1, 'penpals_find, Redis Lua error: %s', $@);
     } else {
       $self->load_lua_programs;
       $result =
@@ -24408,9 +24433,8 @@ sub save_info_preliminary {
   my $mail_id = $msginfo->mail_id;
   defined $mail_id  or die "save_info_preliminary: mail_id still undefined";
 
-  # connect() sets the default ttl if missing, need to call it before do_log
   $self->connect  if !$self->{connected};
-  ll(5) && do_log(5, "redis: save_info_preliminary: %s, %s, ttl %s s",
+  ll(5) && do_log(5, 'redis: save_info_preliminary: %s, %s, ttl %s s',
                   $mail_id, int $msginfo->rx_time, $self->{ttl}||'x');
 
   # use Lua to do HSETNX *and* EXPIRE atomically, otherwise we risk inserting
@@ -24425,7 +24449,7 @@ sub save_info_preliminary {
   } or do {  # Lua function probably not cached, define again and re-try
     if ($@ !~ /^NOSCRIPT/) {
       $self->disconnect; chomp $@;
-      do_log(-1, "Redis Lua error: %s", $@);
+      do_log(-1, 'save_info_preliminary, Redis Lua error: %s', $@);
     } else {
       $self->load_lua_programs;
       $added = $r->call('EVALSHA', $self->{lua_save_info_preliminary}, @args);
@@ -24459,7 +24483,7 @@ sub query_and_update_ip_reputation {
   } or do {  # Lua function probably not cached, define again and re-try
     if ($@ !~ /^NOSCRIPT/) {
       $self->disconnect; chomp $@;
-      do_log(-1, "Redis Lua error: %s", $@);
+      do_log(-1, "query_and_update_ip_reputation, Redis Lua error: %s", $@);
     } else {
       $self->load_lua_programs;
       $ip_stats = $r->call('EVALSHA', $self->{lua_query_and_update_ip}, @args);
@@ -24634,7 +24658,7 @@ sub save_info_final {
   } or do {  # Lua function probably not cached, define again and re-try
     if ($@ !~ /^NOSCRIPT/) {
       $self->disconnect; undef $result; chomp $@;
-      do_log(-1, "Redis Lua error: %s", $@);
+      do_log(-1, "save_info_final, Redis Lua error: %s", $@);
     } else {
       $self->load_lua_programs;
       $result = $r->call('EVALSHA', $self->{lua_save_final},
@@ -25000,7 +25024,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform c cr ca);
   import Amavis::Util qw(ll do_log do_log_safe);
@@ -25281,7 +25305,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::rfc2821_2822_Tools;
@@ -25737,7 +25761,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Util qw(ll do_log untaint min max minmax);
 }
@@ -26036,7 +26060,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT = qw(&mail_via_sql);
   import Amavis::Conf qw(:platform c cr ca $sql_quarantine_chunksize_max);
@@ -26173,7 +26197,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars c cr ca);
   import Amavis::Util qw(ll untaint min max minmax unique_list do_log
@@ -27336,7 +27360,7 @@ use IO::File qw(O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_EXCL);
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform c cr ca);
   import Amavis::Util qw(ll do_log min max minmax untaint untaint_inplace
@@ -27738,7 +27762,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars :sa c cr ca);
   import Amavis::Util qw(ll do_log sanitize_str min max minmax
@@ -28192,7 +28216,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars :sa c cr ca);
   import Amavis::Util qw(ll do_log sanitize_str min max minmax get_deadline);
@@ -28404,7 +28428,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   # let a 'require' understand that this module is already loaded:
   $INC{'Mail/SpamAssassin/Logger/Amavislog.pm'} = 'amavisd';
@@ -28441,7 +28465,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   import Amavis::Conf qw(:platform :confvars :sa $daemon_user c cr ca);
   import Amavis::Util qw(ll do_log do_log_safe sanitize_str prolong_timer
@@ -29399,7 +29423,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&init &decompose_part &determine_file_types);
   import Amavis::Util qw(untaint min max minmax ll do_log snmp_count
@@ -30241,6 +30265,7 @@ sub do_unrar($$$;$) {
   my $lcnt = 0; my $member_name; my $bytes = 0; my $last_line;
   my $item_num = 0; my $parent_placement = $part->mime_placement;
   my $retval = 1; my $fn = $part->full_name; my($proc_fh,$pid);
+  my $unrarvers = 5;
   my(@common_rar_switches) = qw(-c- -p- -idcdp);  # -av-
 
   prolong_timer('do_unrar_pre');  # restart timer
@@ -30261,31 +30286,62 @@ sub do_unrar($$$;$) {
       } elsif ($hypcount < 1 && $ln =~ /^Encrypted file:/) {
         do_log(4,"do_unrar: %s", $ln);
         $part->attributes_add('U','C');
+      } elsif ($hypcount < 1 &&
+               $ln =~ /^\s+Size\s+Packed Ratio\s+Date\s+Time\s+Attr\s+CRC/) {
+        do_log(5,"do_unrar: found unrar version < 5");
+        $unrarvers = 4;
       } elsif ($hypcount == 1) {
-        $lcnt++; local($1,$2,$3);
-        if ($lcnt % 2 == 0) {  # information line (every other line)
-          if ($entries_cnt++, $MAXFILES && $entries_cnt > $MAXFILES)
-            { die "Maximum number of files ($MAXFILES) exceeded" }
-          if ($ln !~ /^\s+(\d+)\s+(\d+)\s+(\d+%|-->|<--|<->)/) {
+        if ($unrarvers >= 5) {
+          local($1,$2,$3,$4,$5);
+          if ($ln !~ /^ ([* ]) \s+ \S+ \s+ (\d+) \s+ (\d+) \s+
+                      ( \d+ % | --> | <-- | <-> ) \s+
+                      \S+ \s+ \S+ \s+ \S+ \s+ (.*)/xs) {
             do_log($testing_for_sfx ? 4 : -1,
                    "do_unrar: can't parse info line for \"%s\" %s",
                    $member_name,$ln);
-          } elsif (defined $member_name) {
-            do_log(5,'do_unrar: member: "%s", size: %s', $member_name,$1);
-            if ($1 > 0) { $bytes += $1; push(@list, $member_name) }
+          } else {
+            $member_name = $5;
+            if ($1 eq '*') {   # member is encrypted
+              $encryptedcount++; $item_num++;
+              # make a phantom entry - carrying only name and attributes
+              my $newpart_obj =
+                Amavis::Unpackers::Part->new("$tempdir/parts",$part);
+              $newpart_obj->mime_placement("$parent_placement/$item_num");
+              $newpart_obj->name_declared($member_name);
+              $newpart_obj->attributes_add('U','C');
+            } else {  # makes no sense extracting encrypted files
+              do_log(5,'do_unrar: member: "%s", size: %s', $member_name,$2);
+              if ($2 > 0) { $bytes += $2; push(@list, $member_name) }
+            }
+            undef $member_name;
           }
-          undef $member_name;
-        } elsif ($ln =~ /^(.)(.*)\z/s) {
-          $member_name = $2; # all but the first character (space or '*')
-          if ($1 eq '*') {   # member is encrypted
-            $encryptedcount++; $item_num++;
-            # make a phantom entry - carrying only name and attributes
-            my $newpart_obj =
-              Amavis::Unpackers::Part->new("$tempdir/parts",$part);
-            $newpart_obj->mime_placement("$parent_placement/$item_num");
-            $newpart_obj->name_declared($member_name);
-            $newpart_obj->attributes_add('U','C');
-            undef $member_name;  # makes no sense extracting encrypted files
+        } else {  # old version of unrar
+          $lcnt++; local($1,$2,$3);
+          if ($lcnt % 2 == 0) {  # information line (every other line)
+            if ($entries_cnt++, $MAXFILES && $entries_cnt > $MAXFILES)
+              { die "Maximum number of files ($MAXFILES) exceeded" }
+            if ($ln !~ /^ \s+ (\d+) \s+ (\d+) \s+
+                        ( \d+% | --> | <-- | <-> )/xs) {
+              do_log($testing_for_sfx ? 4 : -1,
+                     "do_unrar: can't parse info line for \"%s\" %s",
+                     $member_name,$ln);
+            } elsif (defined $member_name) {
+              do_log(5,'do_unrar: member: "%s", size: %s', $member_name,$1);
+              if ($1 > 0) { $bytes += $1; push(@list, $member_name) }
+            }
+            undef $member_name;
+          } elsif ($ln =~ /^(.)(.*)\z/s) {
+            $member_name = $2; # all but the first character (space or '*')
+            if ($1 eq '*') {   # member is encrypted
+              $encryptedcount++; $item_num++;
+              # make a phantom entry - carrying only name and attributes
+              my $newpart_obj =
+                Amavis::Unpackers::Part->new("$tempdir/parts",$part);
+              $newpart_obj->mime_placement("$parent_placement/$item_num");
+              $newpart_obj->name_declared($member_name);
+              $newpart_obj->attributes_add('U','C');
+              undef $member_name;  # makes no sense extracting encrypted files
+            }
           }
         }
       }
@@ -31148,7 +31204,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&dkim_key_postprocess &generate_authentication_results
                   &dkim_make_signatures &adjust_score_by_signer_reputation
@@ -32294,7 +32350,7 @@ no warnings 'uninitialized';
 BEGIN {
   require Exporter;
   use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-  $VERSION = '2.320';
+  $VERSION = '2.321';
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(&show_or_test_dkim_public_keys &generate_dkim_private_key
                   &convert_dkim_keys_file);
diff --git a/amavisd-new-courier.patch b/amavisd-new-courier.patch
index de0033b..5cda457 100644
--- a/amavisd-new-courier.patch
+++ b/amavisd-new-courier.patch
@@ -1,5 +1,5 @@
---- amavisd.ori	2014-05-07 16:50:03.712143074 +0200
-+++ amavisd	2014-05-07 16:50:36.219141034 +0200
+--- amavisd.ori	2014-06-27 19:43:59.240215903 +0200
++++ amavisd	2014-06-27 19:44:18.402213378 +0200
 @@ -108,5 +108,5 @@
  #  Amavis::In::AMPDP
  #  Amavis::In::SMTP
@@ -14,7 +14,7 @@
 +    IO::Handle IO::File IO::Socket IO::Socket::UNIX IO::Select
      IO::Stringy Digest::MD5 Unix::Syslog File::Basename
      Compress::Zlib MIME::Base64 MIME::QuotedPrint MIME::Words
-@@ -11840,4 +11840,18 @@
+@@ -11852,4 +11852,18 @@
  
  ### Net::Server hook
 +### This hook takes place immediately after the "->run()" method is called.
@@ -33,14 +33,14 @@
 +### Net::Server hook
  ### Occurs in the parent (master) process after (possibly) opening a log file,
  ### creating pid file, reopening STDIN/STDOUT to /dev/null and daemonizing;
-@@ -11845,5 +11859,5 @@
+@@ -11857,5 +11871,5 @@
  #
  sub post_configure_hook {
 -# umask(0007);  # affect protection of Unix sockets created by Net::Server
 +  umask(0007);  # affect protection of Unix sockets created by Net::Server
  }
  
-@@ -11864,9 +11878,18 @@
+@@ -11876,9 +11890,18 @@
  ### Net::Server hook
  ### Occurs in the parent (master) process after binding to sockets,
 -### but before chrooting and dropping privileges
@@ -61,7 +61,7 @@
 +  }
  }
  
-@@ -11924,4 +11947,15 @@
+@@ -11936,4 +11959,15 @@
      }
      $spamcontrol_obj->init_pre_fork  if $spamcontrol_obj;
 +    if ($courierfilter_shutdown) {
@@ -77,7 +77,7 @@
 +    }
      my(@modules_extra) = grep(!exists $modules_basic{$_}, keys %INC);
      if (@modules_extra) {
-@@ -12393,5 +12427,7 @@
+@@ -12405,5 +12439,7 @@
        $ampdp_in_obj->process_policy_request($sock, $conn, \&check_mail, 0);
      } elsif ($suggested_protocol eq 'COURIER') {
 -      die "unavailable support for protocol: $suggested_protocol";
@@ -86,7 +86,7 @@
 +      $courier_in_obj->process_courier_request($sock, $conn, \&check_mail);
      } elsif ($suggested_protocol eq 'QMQPqq') {
        die "unavailable support for protocol: $suggested_protocol";
-@@ -12501,4 +12537,24 @@
+@@ -12513,4 +12549,24 @@
  }
  
 +### Net::Server hook
@@ -111,7 +111,7 @@
 +
  ### Child is about to be terminated
  ### user customizable Net::Server hook
-@@ -17662,4 +17718,9 @@
+@@ -17687,4 +17743,9 @@
  undef $Amavis::Conf::log_verbose_templ;
  
 +# courierfilter shutdown needs can_read_hook, added in Net::Server 0.90
@@ -121,14 +121,14 @@
 +
  if (defined $desired_user && $daemon_user ne '') {
    local($1);
-@@ -18315,4 +18376,6 @@
+@@ -18340,4 +18401,6 @@
      host => $bind_to[0],  # default bind, redundant, merged to @listen_sockets
      listen => $listen_queue_size, # undef for a default
 +    # need to set multi_port for can_read_hook
 +    multi_port => $courierfilter_shutdown ? 1 : undef,
      max_servers => $max_servers,  # number of pre-forked children
      !defined($min_servers) ? ()
-@@ -21801,5 +21864,424 @@
+@@ -21826,5 +21889,424 @@
  no warnings 'uninitialized';
  
 -BEGIN { die "Code not available for module Amavis::In::Courier" }
diff --git a/amavisd-new-qmqpqq.patch b/amavisd-new-qmqpqq.patch
index 62e60fc..4118326 100644
--- a/amavisd-new-qmqpqq.patch
+++ b/amavisd-new-qmqpqq.patch
@@ -1,36 +1,36 @@
---- amavisd.ori	2014-05-07 16:50:03.712143074 +0200
-+++ amavisd	2014-05-07 16:51:36.275142228 +0200
+--- amavisd.ori	2014-06-27 19:43:59.240215903 +0200
++++ amavisd	2014-06-27 19:45:10.174210666 +0200
 @@ -109,4 +109,5 @@
  #  Amavis::In::SMTP
  #( Amavis::In::Courier )
 +#  Amavis::In::QMQPqq
  #  Amavis::Out::SMTP::Protocol
  #  Amavis::Out::SMTP::Session
-@@ -4746,4 +4747,5 @@
+@@ -4755,4 +4756,5 @@
      $myproduct_name,
      $conn->socket_port eq '' ? 'unix socket' : "port ".$conn->socket_port);
 +  # must not use proto name QMQPqq in 'with'
    $s .= "\n with $smtp_proto"  if $smtp_proto=~/^(ES|S|L)MTPS?A?\z/i; #RFC 3848
    $s .= "\n id $id"  if defined $id && $id ne '';
-@@ -10977,4 +10979,5 @@
+@@ -10989,4 +10991,5 @@
    $extra_code_sql_lookup $extra_code_ldap
    $extra_code_in_ampdp $extra_code_in_smtp $extra_code_in_courier
 +  $extra_code_in_qmqpqq
    $extra_code_out_smtp $extra_code_out_pipe
    $extra_code_out_bsmtp $extra_code_out_local $extra_code_p0f
-@@ -11004,4 +11007,5 @@
+@@ -11016,4 +11019,5 @@
  # Amavis::In::AMPDP, Amavis::In::SMTP and In::Courier objects
  use vars qw($ampdp_in_obj $smtp_in_obj $courier_in_obj);
 +use vars qw($qmqpqq_in_obj);            # Amavis::In::QMQPqq object
  
  use vars qw($sql_dataset_conn_lookups); # Amavis::Out::SQL::Connection object
-@@ -11749,4 +11753,5 @@
+@@ -11761,4 +11765,5 @@
    do_log(0,"SMTP-in proto code  %s loaded", $extra_code_in_smtp    ?'':" NOT");
    do_log(0,"Courier proto code  %s loaded", $extra_code_in_courier ?'':" NOT");
 +  do_log(0,"QMQPqq-in proto code %s loaded", $extra_code_in_qmqpqq ?'':" NOT");
    do_log(0,"SMTP-out proto code %s loaded", $extra_code_out_smtp   ?'':" NOT");
    do_log(0,"Pipe-out proto code %s loaded", $extra_code_out_pipe   ?'':" NOT");
-@@ -12395,5 +12400,9 @@
+@@ -12407,5 +12412,9 @@
        die "unavailable support for protocol: $suggested_protocol";
      } elsif ($suggested_protocol eq 'QMQPqq') {
 -      die "unavailable support for protocol: $suggested_protocol";
@@ -41,20 +41,20 @@
 +      $qmqpqq_in_obj->process_qmqpqq_request($sock,$conn,\&check_mail);
      } elsif ($suggested_protocol eq 'TCP-LOOKUP') { #postfix maps, experimental
        process_tcp_lookup_request($sock, $conn);
-@@ -12518,4 +12527,6 @@
+@@ -12530,4 +12539,6 @@
    do_log_safe(5,"child_finish_hook: invoking DESTROY methods");
    undef $smtp_in_obj; undef $ampdp_in_obj; undef $courier_in_obj;
 +  undef $qmqpqq_in_obj;
 +  undef $qmqpqq_in_obj;
    undef $sql_storage; undef $sql_wblist; undef $sql_lookups;
    undef $sql_dataset_conn_lookups; undef $sql_dataset_conn_storage;
-@@ -17456,4 +17467,5 @@
+@@ -17481,4 +17492,5 @@
      $extra_code_sql_lookup, $extra_code_ldap,
      $extra_code_in_ampdp, $extra_code_in_smtp, $extra_code_in_courier,
 +    $extra_code_in_qmqpqq,
      $extra_code_out_smtp, $extra_code_out_pipe,
      $extra_code_out_bsmtp, $extra_code_out_local,
-@@ -17813,5 +17825,11 @@
+@@ -17838,5 +17850,11 @@
      undef $extra_code_in_courier;
    }
 -  if ($needed_protocols_in{'QMQPqq'})  { die "In::QMQPqq code not available" }
@@ -67,7 +67,7 @@
 +  }
  }
  
-@@ -21807,4 +21825,276 @@
+@@ -21832,4 +21850,276 @@
  __DATA__
  #

 +package Amavis::In::QMQPqq;
@@ -344,8 +344,8 @@
 +#

  package Amavis::Out::SMTP::Protocol;
  use strict;
---- amavisd.conf.ori	2014-05-07 16:50:20.541141753 +0200
-+++ amavisd.conf	2014-05-07 16:51:36.277142196 +0200
+--- amavisd.conf.ori	2014-06-27 19:44:08.520275737 +0200
++++ amavisd.conf	2014-06-27 19:45:10.175209744 +0200
 @@ -56,6 +56,6 @@
                 # option(s) -p overrides $inet_socket_port and $unix_socketname
  

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/amavisd-new/pkg-amavisd-new.git



More information about the Amavisd-new-commits mailing list