X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=t-prot;h=21b5d21f91806e46a6ef5d4d31fa39d6d5872165;hb=be81225823f000a965985749c6ea8837e31b23f3;hp=bf3a0a199a20cb4d18beb5089fc1ce766665ce13;hpb=fa59d87d4825cc16e7d38d2f4e8b71cd057ee85f;p=pkg%2Ft-prot.git diff --git a/t-prot b/t-prot index bf3a0a1..21b5d21 100755 --- a/t-prot +++ b/t-prot @@ -1,13 +1,13 @@ #!/usr/bin/perl -w -# $Id: t-prot,v 1.261 2009/08/24 20:32:11 jochen Exp $ +# $Id: t-prot,v 1.280 2010/02/11 11:10:47 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.7'; +use constant VER => '2.14'; use constant REV => ''; -use constant REL => q$Revision: 1.261 $=~m/(\d+(?:\.\d+)+)/; +use constant REL => q$Revision: 1.280 $=~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 @@ -125,8 +126,7 @@ sub help { --pgp-move-vrf move pgp output if verified and good; requires -Mmutt --pgp-short hide non-relevant pgp key uids; requires -Mmutt -r delete mail header lines - -S[=n] supress signatures with more than n lines; - default is $maxsig if n not specified + -S[=n] supress signatures with more than n lines (default $maxsig) -s delete signature --sigsmax[=n] max number of sigs tolerated, no value for unlimited --spass enable SpamAssassin workaround @@ -359,19 +359,16 @@ sub pgp { my $uid = 1; for (my $i=$x+1; $i1 && - index($$L[$i], "gpg: $gpg_aka")==0 && - index($$L[$i], $from)<0) - { - splice(@$L, $i, 1); - splice(@$V, $i, 1); - $i--; + if ($pgpshort && index($$L[$i], "gpg: $gpg_aka")==0) { + $uid++; + + if ($uid>1 && index($$L[$i], $from)<0) { + splice(@$L, $i, 1); + splice(@$V, $i, 1); + $i--; + } } - elsif ($$L[$i]=~/^(?:\e[^\a]+\a)?(?:\Q$mutt_pgpoutend\E)/o) - { + elsif ($$L[$i]=~/^(?:\e[^\a]+\a)?(?:\Q$mutt_pgpoutend\E)/o) { if ($pgpmove || ($pgpmovevrf && (!$sigint) && verified($L, $x+1, $i))) { @@ -442,23 +439,13 @@ sub process_msg { my (@ads, @hdr, @bo1, @bo2, @ftr, @sig, @vrb, @att) = ((), (), (), (), (), (), (), (), ()); - # First, remove and store lines we might need later... + # Remove and store lines we might need later... # 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); @@ -559,9 +546,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; } @@ -731,6 +717,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] !~ @@ -944,11 +932,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; } } } @@ -1065,9 +1054,7 @@ if ($mua eq 'mutt') { } } -else { - if ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); } -} +elsif ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); } # Read message: @@ -1076,6 +1063,25 @@ if (!open(IN, $ifile)) my @message = ; 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);