]> git.deb.at Git - pkg/t-prot.git/blobdiff - t-prot
Imported Debian patch 2.13.1-1
[pkg/t-prot.git] / t-prot
diff --git a/t-prot b/t-prot
index c4b06b2b358a8fd035e52197dee813ca71054197..364af8e3746f2de28860b14d398154983de75af8 100755 (executable)
--- a/t-prot
+++ b/t-prot
@@ -1,13 +1,13 @@
 #!/usr/bin/perl -w
-# $Id: t-prot,v 1.264 2009/12/19 22:18:47 jochen Exp $
+# $Id: t-prot,v 1.277 2010/02/06 03:29:23 jochen Exp $
 
 require 5.006;
 use strict;
 use Fcntl qw(O_EXCL O_WRONLY O_CREAT);
 use Getopt::Mixed qw(nextOption);
-use constant VER            => '2.8';
+use constant VER            => '2.13';
 use constant REV            => '';
-use constant REL            => q$Revision: 1.264 $=~m/(\d+(?:\.\d+)+)/;
+use constant REL            => q$Revision: 1.277 $=~m/(\d+(?:\.\d+)+)/;
 # MTA expecting mail on STDIN
 # (you might have to adjust this if using a different MTA)
 use constant SENDMAIL       => '/usr/sbin/sendmail -oi';
@@ -36,8 +36,9 @@ use vars qw(
 );
 
 
-# Please adjust these vals to your needs (they are no constants because
-# command line can change them or they are used in rexexp's):
+# Please adjust these vals to your needs only if you know what you are
+# doing. They are no constants because command line can change them or
+# they are used in some rexexp.
 $0 =~ s!^.*/!!;
 $maxsig         = 4;      # max. valid signature length
 $maxlines       = undef;  # no limit of message lines
@@ -54,7 +55,7 @@ $ftr_ad         = undef;  # too hard on performance to be default
 $ftr_ml         = undef;  # too hard on performance to be default
 $ofile          = '-';    # use STDOUT if nothing is specified
 $spass_prefix   = 'SPAM: ';
-$check_ratio    = .75;    # 3/4 tofu is enough not to accept the message
+$check_ratio    = 0;      # off by default
 $msg_quote      = "Blocked by $0: This message has been rejected because of a full quote. Please see http://learn.to/quote/ and http://www.escape.de/users/tolot/mutt/ for more info. Have a nice day!\n";
 $msg_ratio      = "Blocked by $0: This message has been rejected because of excessive quoting. Please see http://learn.to/quote/ and http://www.escape.de/users/tolot/mutt/ for more info. Have a nice day!\n";
 # end of user adjusted vals
@@ -442,11 +443,6 @@ sub process_msg {
     my (@ads, @hdr, @bo1, @bo2, @ftr, @sig, @vrb, @att) = 
         ((), (), (), (), (), (), (), (), ());
 
-    # First, check msg length and stop processing if msg is too long:
-    if ((defined $maxlines) && (@$lines > $maxlines)) {
-        return;
-    }
-
     # Remove and store lines we might need later...
     # Remove headers:
     if (!$nohdr) {
@@ -554,9 +550,8 @@ sub process_msg {
                 if (index($$lines[$x], $indent)==0) { $y++; }
             }
         }
-        $y = $y/$z;
 
-        if ($y>=$check_ratio) {
+        if ($y/$z>=$check_ratio) {
             print $msg_ratio;
             exit EX_UNAVAILABLE;
         }
@@ -726,6 +721,8 @@ sub process_msg {
                 if ((!$k) && $$lines[$x] !~ /^\s*$/o &&
                     ((!$mua) ||
                      ($mua eq 'mutt' &&
+                         # this line seems not necessary since mutt-1.5.18:
+                         $$lines[$x] !~ /^\e[^\a]+\a$/o &&
                          $$lines[$x] !~
                              /^(?:\e[^\a]+\a)?(?:\Q$mutt_attachment\E)/o &&
                          $$lines[$x] !~
@@ -939,11 +936,12 @@ while (my ($opt, $val, $pretty) = nextOption()) {
     elsif ($opt eq 'c')     { $cr = 1; }
     elsif ($opt eq 'check') {
         $check = 1;
-        while ($val && $val =~ s/^([^,\s]+)(?:,(\S+))?$/$2/) {
+        while ($val && $val =~ /^([^,\s]+)(?:,(\S+))?$/) {
             my $foo = $1;
+            $val = $2;
 
-            if ($foo =~ /^ratio=(0?\.\d+)$/) {
-                $check_ratio = $1?$1:1;
+            if ($foo =~ /^ratio(?:=(0?\.\d+))?$/) {
+                $check_ratio = $1?$1:0.75;
             }
         }
     }
@@ -1060,9 +1058,7 @@ if ($mua eq 'mutt') {
     }
 
 }
-else {
-    if ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
-}
+elsif ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
 
 
 # Read message:
@@ -1071,6 +1067,25 @@ if (!open(IN, $ifile))
 my @message = <IN>;
 close IN;
 
+# First, check msg length and stop processing if msg is too long:
+if ((defined $maxlines) && (@message > $maxlines)) {
+    if ($ofile ne 'NONE') {
+        if ($mua eq 'mutt') {
+            my $x = 0;
+            if (!$nohdr) {
+                do { $x++; } while ($x<$#message && $message[$x]!~/^$/);
+                $x++;
+            }
+            splice(@message, $x, 0,
+                ("[---=| Processing by $0 skipped: message too long |=---]\n\n"));
+        }
+
+        write_msg(($mda?'|'.SENDMAIL." $mda":">$ofile"), \@message);
+    }
+    if ($mua eq 'mutt') { exit(EX_OK); }
+    exit(EX_DATAERR);
+}
+
 # this should be self-explanatory:
 process_msg(\@message);