]> git.deb.at Git - pkg/t-prot.git/blobdiff - t-prot
Imported Debian patch 2.4-1~bpo1
[pkg/t-prot.git] / t-prot
diff --git a/t-prot b/t-prot
index 20f3119f5b4e607e4af69bb62321b66258aaac26..5141512af69382c96f70b10560b16ed89b34ce51 100755 (executable)
--- a/t-prot
+++ b/t-prot
@@ -1,13 +1,13 @@
 #!/usr/bin/perl -w
-# $Id: t-prot,v 1.250 2006/12/19 13:13:57 jochen Exp $
+# $Id: t-prot,v 1.253 2007/03/09 15:06:04 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.3';
+use constant VER            => '2.4';
 use constant REV            => '';
-use constant REL            => q$Revision: 1.250 $=~m/(\d+(?:\.\d+)+)/;
+use constant REL            => q$Revision: 1.253 $=~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';
@@ -23,9 +23,9 @@ use constant EX_BOUNCE      => EX_UNAVAILABLE;
 use vars qw(
     $ad $ads $bigqn $bigqx $boun $check $check_ratio $cr $diff $elli
     $footers $ftr_ad $ftr_ml $hdrs $indent $kamm $kdiff $kminl $kmaxl
-    $lax $lsig $maxsig $mda $ml $ms $ms_smart $msg_quote $msg_ratio
-    $mua $nohdr $ofile $pgpshort $pgpmove $pgpmovevrf $sig $sigint
-    $sign $spass $spass_prefix $sysl $trad $trsp
+    $lax $lsig $maxsig $maxlines $mda $ml $ms $ms_smart $msg_quote
+    $msg_ratio $mua $nohdr $ofile $pgpshort $pgpmove $pgpmovevrf $sig
+    $sigint $sign $spass $spass_prefix $sysl $trad $trsp
 
     $gpg_WARNING $gpg_Warning $gpg_Cantcheck $gpg_aka $gpg_bad
     $gpg_expired $gpg_good $gpg_bug
@@ -40,6 +40,7 @@ use vars qw(
 # command line can change them or they are used in rexexp's):
 $0 =~ s!^.*/!!;
 $maxsig         = 4;      # max. valid signature length
+$maxlines       = undef;  # no limit of message lines
 $indent         = '>';    # Indent string, regexp to identify a quoted line
 $kminl          = 65;     # see decomb() for details
 $kmaxl          = 80;
@@ -113,6 +114,7 @@ sub help {
   --locale=LOCALE internationalization; currently only used with -Mmutt
   -M, --mua=MUA   turn on special treatment for some mail user agents
   -m              delete MS style TOFU; careful: might be too agressive
+  --max-lines=x   maximum number of message lines
   --ms-smart      try to be smart with MS style TOFU; req. -Mmutt and -m
   -o=OUTFILE      file to be written to; '-' for STDOUT (default), 'NONE'
                   for no output at all
@@ -160,12 +162,14 @@ sub remove_footers {
     }
 
     if ($F && scalar(@$L)) {
-        if (!opendir(DIR, $F)) { print STDERR "Could not open $F: $!\n"; exit(EX_IOERR); }
+        if (!opendir(DIR, $F))
+            { print STDERR "Could not open $F: $!\n"; exit(EX_IOERR); }
         my @feet = grep { /^[^.]/ && -f "$F/$_" } readdir DIR;
         closedir DIR;
 
         foreach my $f (@feet) {
-            if (!open(IN, "$F/$f")) { print STDERR "Could not open $F/$f: $!\n"; exit(EX_IOERR); }
+            if (!open(IN, "$F/$f"))
+                { print STDERR "Could not open $F/$f: $!\n"; exit(EX_IOERR); }
             my @l = <IN>;
             close IN;
 
@@ -343,7 +347,8 @@ sub pgp {
                 if (index($$H[$m], 'From:')==0) {
                     $from = $$H[$m];
                     $m++;
-                    while (exists($$H[$m]) && $$H[$m] =~ /^\s/) { $from .= $$H[$m]; $m++; }
+                    while (exists($$H[$m]) && $$H[$m] =~ /^\s/)
+                        { $from .= $$H[$m]; $m++; }
                     last;
                 }
             }
@@ -439,9 +444,19 @@ sub process_msg {
     # Remove headers:
     if (!$nohdr) {
         for ($x=0; $x<$#$lines; $x++) { if (@$lines[$x] =~ /^$/) { last; }; }
+
+        # check body length and stop processing silently if msg is too long:
+        if ((defined $maxlines) && (@$lines-$x > $maxlines)) {
+            return;
+        }
+
         @hdr = @$lines[0..$x];
         splice(@$lines, 0, $x+1);
     }
+    elsif ((defined $maxlines) && (@$lines > $maxlines)) {
+        # check body length and stop processing silently if msg is too long:
+        return;
+    }
     # remember the original body lines count
     my $linecount = scalar(@$lines);
 
@@ -894,7 +909,8 @@ sub process_msg {
 
 
 # environment
-my $locale = $ENV{'LC_ALL'}?$ENV{'LC_ALL'}:($ENV{'LC_MESSAGES'}?$ENV{'LC_MESSAGES'}:$ENV{'LANG'});
+my $locale = $ENV{'LC_ALL'}?$ENV{'LC_ALL'}:
+                 ($ENV{'LC_MESSAGES'}?$ENV{'LC_MESSAGES'}:$ENV{'LANG'});
 
 # command line switches
 ($ad, $ads, $bigqn, $bigqx, $check, $cr, $sysl, $diff, $elli, $footers, $lax,
@@ -906,8 +922,8 @@ my $ifile   = '-';    # use STDIN if nothing specified
 # get command line params:
 Getopt::Mixed::init('a A=s c d e h i=s k L=s l m M=s o=s P=s p:s r S:i'.
     ' s t v w bigq:s body check:s debug>d diff ftr-ad ftr-ml help>h'.
-    ' kminl=i kmaxl=i kdiff=i lax-security locale=s ms-smart mua>M'.
-    ' pgp-short pgp-move pgp-move-vrf sigsmax:i spass version>v');
+    ' kminl=i kmaxl=i kdiff=i lax-security locale=s max-lines=i ms-smart'.
+    ' mua>M pgp-short pgp-move pgp-move-vrf sigsmax:i spass version>v');
 while (my ($opt, $val, $pretty) = nextOption()) {
     if    ($opt eq 'a')     { $ad = 1; }
     elsif ($opt eq 'A')     { $ads = $val; }
@@ -944,6 +960,7 @@ while (my ($opt, $val, $pretty) = nextOption()) {
     elsif ($opt eq 'lax-security') { $lax = 1; }
     elsif ($opt eq 'locale') { $locale = $val; }
     elsif ($opt eq 'm')     { $ms = 1; }
+    elsif ($opt eq 'max-lines') { $maxlines = $val; }
     elsif ($opt eq 'ms-smart') { $ms_smart = 1; $ms = 1; }
     elsif ($opt eq 'M') {
         $mua = lc($val);
@@ -1046,7 +1063,8 @@ else {
 
 
 # Read message:
-if (!open(IN, $ifile)) { print STDERR "Could not open $ifile: $!\n"; exit(EX_IOERR); }
+if (!open(IN, $ifile))
+    { print STDERR "Could not open $ifile: $!\n"; exit(EX_IOERR); }
 my @message = <IN>;
 close IN;