X-Git-Url: https://git.deb.at/w?p=pkg%2Ft-prot.git;a=blobdiff_plain;f=t-prot;fp=t-prot;hb=dfaa255c1681430ea20b11583ffe4c0c31b79072;hpb=d6fc6da68020f73af04713140c0d760223131515 diff --git a/t-prot b/t-prot index fb3029f..876b5ff 100755 --- a/t-prot +++ b/t-prot @@ -1,13 +1,13 @@ #!/usr/bin/perl -w -# $Id: t-prot,v 1.300 2010/04/09 06:47:11 jochen Exp $ +# $Id: t-prot,v 1.307 2010/07/01 16:02:56 jochen Exp $ require 5.006; use strict; use Fcntl qw(O_EXCL O_WRONLY O_CREAT); use Getopt::Long qw(:config gnu_getopt no_ignore_case); -use constant VER => '2.98'; +use constant VER => '2.99'; use constant REV => ''; -use constant REL => q$Revision: 1.300 $=~m/(\d+(?:\.\d+)+)/; +use constant REL => q$Revision: 1.307 $=~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'; @@ -22,7 +22,7 @@ use constant EX_IOERR => 74; use constant EX_BOUNCE => EX_UNAVAILABLE; use vars qw( $ad $ads $bigqn $bigqx $boun $check $check_ratio $cr $crshrink $diff $elli - $footers $ftr_ad $ftr_ml $hdrs $indent $kamm $kdiff $kminl $kmaxl + $fixind $footers $ftr_ad $ftr_ml $hdrs $indent $kamm $kdiff $kminl $kmaxl $lax $lsig $maxsig $maxlines $mda $ml $gw $ms $ms_smart $msg_quote $msg_ratio $mua $nohdr $ofile $pgpshort $pgpmove $pgpmovevrf $reply $sani $sig $sigint $sign $spass $spass_prefix $sysl $trad $trsp @@ -43,7 +43,7 @@ $0 =~ s!^.*/!!; $maxsig = 4; # max. valid signature length $maxlines = undef; # no limit of message lines $crshrink = 2; # multiple blank lines are shrunk to $crshrink lines -$indent = '>'; # Indent string, regexp to identify a quoted line +$indent = '>'; # Indent string to identify a quoted line $kminl = 65; # see decomb() for details $kmaxl = 80; $kdiff = 20; @@ -101,6 +101,7 @@ sub help { -d, --debug print notice to syslog when bouncing; requires -p --diff tolerate diffs -e force ellipsis for excessive punctuation + --fixind fix quotes to adhere to RFC 3676 --ftr-ad enable aggressive ad footer matching; requires -A --ftr-ml enable aggressive mailing list footer matching; req. -L --groupwise delete Novell Groupwise style TOFU @@ -116,7 +117,7 @@ sub help { --lax-security use unsafe writing method; USE ON YOUR OWN RISK! --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 + -m delete MS style TOFU; careful: might be too aggressive --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) @@ -127,7 +128,7 @@ sub help { --pgp-short hide non-relevant pgp key uids; requires -Mmutt -r delete mail header lines --reply squeeze multiple reply prefixes in subject line - -S[n] supress signatures with more than n lines (default $maxsig) + -S[n] suppress signatures with more than n lines (default $maxsig) -s delete signature --sani sanitize some header fields --sigsmax[=n] max number of sigs tolerated, no value for unlimited @@ -341,7 +342,7 @@ sub decomb { } # debigq(): Finds big quotes (more than $n lines quoted) and deletes all -# but $x lines of them. +# but the last $x lines of them. sub debigq { my $L = shift; # array of message lines my $V = shift; # array with verbatim list @@ -760,6 +761,25 @@ sub process_msg { } } + # Fix quote markers to adhere to RFC 3676, this changes "> >" to ">> " (if + # the default $indent is used). The space after ">" is not mandatory by RFC + # but makes the result more readable. + if ($fixind) { + for ($x=0; $x=0; $i--) { if ($vrb[$i]) { last; } - if ($$lines[$i] =~ /^$indent/o) { + if (index($$lines[$i], $indent)==0) { $j++; $k = $i; } @@ -951,6 +971,14 @@ sub process_msg { # earlier -- the way it is done right now would screw up the verbatim # list) if ($cr) { + # When handling regular TOFU above we move the last empty line from + # the body to the signature. This prevents the correct removal of + # empty lines before a signature (one line less is removed than it + # should) when -c and -t are used. This fixes it. + if (scalar(@sig) && $sig[0] =~ /^\s*$/) { + push(@$lines, shift(@sig)); + } + my $t = 0; for ($x=scalar(@$lines)-1; $x>=0; $x--) { if ((!$vrb[$x]) && @@ -992,10 +1020,10 @@ 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, +($ad, $ads, $bigqn, $bigqx, $check, $cr, $sysl, $diff, $elli, $fixind, $footers, $lax, $ml, $gw, $ms, $ms_smart, $mda, $mua, $hdrs, $kamm, $lsig, $nohdr, $reply, $sani, $sig, $sigint, $spass, $trad, $trsp) = - (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); my $ifile = '-'; # use STDIN if nothing specified # temp vals: @@ -1013,6 +1041,7 @@ if (!Getopt::Long::GetOptions( 'debug|d' => \$sysl, 'diff' => \$diff, 'e' => \$elli, + 'fixind' => \$fixind, 'ftr-ad' => \$ftr_ad, 'ftr-ml' => \$ftr_ml, 'groupwise' => \$gw,