X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=t-prot;h=f461425910bece44ad8223efe433a077e625992e;hb=37d543ad8732215e67fbf6d2005154d8a8349efe;hp=876b5ff3ae061bf35435873714622b39551e1f9c;hpb=dfaa255c1681430ea20b11583ffe4c0c31b79072;p=pkg%2Ft-prot.git diff --git a/t-prot b/t-prot index 876b5ff..f461425 100755 --- a/t-prot +++ b/t-prot @@ -1,13 +1,13 @@ #!/usr/bin/perl -w -# $Id: t-prot,v 1.307 2010/07/01 16:02:56 jochen Exp $ +# $Id: t-prot,v 1.319 2013/10/29 11:39:43 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.99'; +use constant VER => '3.0'; use constant REV => ''; -use constant REL => q$Revision: 1.307 $=~m/(\d+(?:\.\d+)+)/; +use constant REL => q$Revision: 1.319 $=~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'; @@ -32,7 +32,8 @@ use vars qw( $mutt_attachment $mutt_contenttype $mutt_pgpsigned $mutt_beginsigned $mutt_pgpclearsigned $mutt_pgpclearsigstart $mutt_pgpencrypted - $mutt_pgpoutstart $mutt_pgpoutend + $mutt_pgpoutstart $mutt_pgpoutend $mutt_pgpcryptend $mutt_pgpcryptstart + $mutt_ssloutstart $mutt_ssloutend ); @@ -68,10 +69,14 @@ $mutt_contenttype = '[-- Type: '; $mutt_pgpsigned = '[-- End of signed data --]'; $mutt_beginsigned = '[-- The following data is signed --]'; $mutt_pgpclearsigstart = '[-- BEGIN PGP SIGNED MESSAGE --]'; +$mutt_pgpcryptend = '[-- END PGP MESSAGE --]'; +$mutt_pgpcryptstart = '[-- BEGIN PGP MESSAGE --]'; $mutt_pgpclearsigned = '[-- END PGP SIGNED MESSAGE --]'; $mutt_pgpencrypted = '[-- End of PGP/MIME encrypted data --]'; $mutt_pgpoutstart = '[-- PGP output follows (current time:'; $mutt_pgpoutend = '[-- End of PGP output --]'; +$mutt_ssloutstart = '[-- OpenSSL output follows'; +$mutt_ssloutend = '[-- End of OpenSSL output --]'; # set the defaults to the C locale $gpg_WARNING = 'WARNING: '; @@ -89,13 +94,13 @@ $gpg_bug = '... this is a bug ('; # help(): print help text and exit with appropriate exit code sub help { print "Usage: $0 [options] - -A DIRECTORY ad footer directory, treat ad footers as signature + -A=DIRECTORY ad footer directory, treat ad footers as signature -a remove ad footers; requires -A --bigq[=n[,x]] remove all but x lines of quotes with more than n lines; default is n=30 and x=10 --body input has no headers; does not work with --pgp-short; multipart messages will not be detected - -c[n] merge multiple blank lines to n lines (default is 2) + -c[=n] merge multiple blank lines to n lines (default is 2) --check[=FLAGS] check various criteria, print error message and quit; see man page for details -d, --debug print notice to syslog when bouncing; requires -p @@ -106,12 +111,12 @@ sub help { --ftr-ml enable aggressive mailing list footer matching; req. -L --groupwise delete Novell Groupwise style TOFU -h, --help show this short help and exit - -i INFILE file to be read; '-' for STDIN (default) + -i=INFILE file to be read; '-' for STDIN (default) -k try to fix \"Kammquotes\" --kdiff=n max. length difference between wrapped lines; req. -k --kmaxl=n max. line length for wrapped line; requires -k --kminl=n min. line length for wrapped line; requires -k - -L DIRECTORY mailing list footer directory, treat mailing list + -L=DIRECTORY mailing list footer directory, treat mailing list footers as signature -l delete mailing list footer; requires -L --lax-security use unsafe writing method; USE ON YOUR OWN RISK! @@ -120,15 +125,15 @@ sub help { -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) - -P MESSAGE user defined bounce message; requires -p - -p[ADDRESS] redirect to ADDRESS if no TOFU was found + -o=OUTFILE file to be written to; '-' for STDOUT (default) + -P=MESSAGE user defined bounce message; requires -p + -p[=ADDRESS] redirect to ADDRESS if no TOFU was found --pgp-move move pgp verification output to bottom; requires -Mmutt --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 --reply squeeze multiple reply prefixes in subject line - -S[n] suppress 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 @@ -410,8 +415,8 @@ sub pgp { for (my $x=0; $x=scalar(@$lines)) { exit(EX_DATAERR); } - if ($bar =~ m!^text/plain!) { + if ($bar =~ m!^text/plain!i) { my $z; for ($z=1; $x+$z<@$lines; $z++) { if (index($$lines[$x+$z], '--'.$foo)==0) { @@ -602,20 +607,41 @@ sub process_msg { # Protect verbatims: $verb = 0; for ($x=0; $x$2 || $x+$2-$1+1>$#$lines) { next; } $vrb[$x] = 1; for (my $i=0; $i<$2-$1+1; $i++) { $vrb[++$x] = 1; } - } elsif ($diff && $$lines[$x] =~ /^([0-9]+),([0-9]+)c([0-9]+),([0-9]+)$/) { + } elsif ($diff && + $$lines[$x] =~ /^([0-9]+),([0-9]+)c([0-9]+),([0-9]+)$/o) { if ($1!=$3 || $1>$2 || $3>$4 || $x+$2-$1+$4-$3+3>$#$lines) { next; } $vrb[$x] = 1; for (my $i=0; $i<$2-$1+$4-$3+3; $i++) { $vrb[++$x] = 1; } + } elsif ($diff && + $$lines[$x] =~ /^--- ./o && + $$lines[$x+1] =~ /^\+\+\+ ./o && + $$lines[$x+2] =~ /^@@ -[0-9]+,([0-9]+) \+[0-9]+,([0-9]+) @@/o + ) { + # Detect and protect unified diffs. + # Proceed only as far as the diff should go. + my $minus = $1; + my $plus = $2; + $vrb[$x++] = 1; + $vrb[$x++] = 1; + $vrb[$x++] = 1; + for (my $cminus = 0, my $cplus = 0; + $cminus<=$minus && $cplus<=$plus && $x<$#$lines; + $x++) { + $vrb[$x] = 1; + if ($$lines[$x] !~ /^\+/) { $cminus++; }; + if ($$lines[$x] !~ /^-/) { $cplus++; }; + } + $x-=1; } else { $vrb[$x] = $verb; } } @@ -656,11 +682,12 @@ sub process_msg { (?:\e[^\a]+\a)? (?:\Q$mutt_contenttype\E) (?:text/plain|application/pgp) - !ox))) || + !oxi))) || ($$lines[$x] =~ /^ (?:\e[^\a]+\a)? (?:\Q$mutt_pgpsigned\E | \Q$mutt_pgpclearsigned\E| + \Q$mutt_pgpcryptend\E| \Q$mutt_pgpencrypted\E) /ox)) { @@ -789,17 +816,17 @@ sub process_msg { # bloat this array if you want more internationalization: my @tofu = ('Original Message', 'Original-Nachricht', - 'Ursprüngliche Nachricht', - 'Ursprüngliche Nachricht', - 'Ursprungliche Nachricht', + 'Urspr.ngliche Nachricht', 'Mensagem original', 'Ursprungligt meddelande', 'Oorspronkelijk bericht', 'Message d\'origine', + 'Origin message', 'Forwarded message', - 'Weitergeleitete Nachricht / Forwarded Message'); + 'Weitergeleitete Nachricht / Forwarded Message', + '[A-Za-z ]+ <(\w[\w.+-]*@(?:[\w.+-]+\.)+[A-Za-z]{2,})> schrieb:'); my $k = 0; # any text above? - my $tmp = 0; # flagged if inside PGP output + my $tmp = 0; # flagged if inside PGP or SSL output DONE: for ($x=0; $x