X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=t-prot;h=f461425910bece44ad8223efe433a077e625992e;hb=389333ed2c618ebd9ddf34e7c54991422a8d6fff;hp=36dde12bd8ce7abac002f35bfdd361de9c4f3bce;hpb=c00238e264f9b353012f4cd0a8fa09916b6e4fae;p=pkg%2Ft-prot.git diff --git a/t-prot b/t-prot index 36dde12..f461425 100755 --- a/t-prot +++ b/t-prot @@ -1,13 +1,13 @@ #!/usr/bin/perl -w -# $Id: t-prot,v 1.310 2010/07/10 19:14:36 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.100'; +use constant VER => '3.0'; use constant REV => ''; -use constant REL => q$Revision: 1.310 $=~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: '; @@ -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,18 +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', '[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