+2010-02-07 14:31 Jochen Striepe
+
+ * t-prot.1: RFC 5322 is offficial standard for the Internet Message
+ Format since October 2008, obsoleting RFC 2822.
+
+2010-02-06 03:29 Jochen Striepe
+
+ * t-prot: Adjust comment to modern t-prot times.
+
+2010-02-04 21:33 Jochen Striepe
+
+ * t-prot.1: Update contributers list.
+
+2010-02-03 17:58 Jochen Striepe
+
+ * t-prot.1: Update date string.
+
+2010-02-03 17:56 Jochen Striepe
+
+ * t-prot.1: Remove redundancies, improve some descriptions.
+
+2010-02-01 23:48 Jochen Striepe
+
+ * contrib/muttrc.t-prot: By now, --bigq is pretty much standard and
+ extremely well-tested, so we include it into default configuration.
+
+2010-02-01 22:34 Jochen Striepe
+
+ * t-prot: Revert thinko from r1.272.
+
+2010-02-01 22:27 Jochen Striepe
+
+ * t-prot: Fix syntax to match coding style.
+
+2010-01-31 22:07 Jochen Striepe
+
+ * t-prot: Release as v2.13.
+
+2010-01-29 13:03 Jochen Striepe
+
+ * t-prot: Fix long standig false positive for mutt<1.5.18 with
+ Microsoft TOFU inside a PGP signed message and no lines above the
+ full quote (indicating a forwarded message rather than a lazy full
+ quote). Thanks to Gerfried Fuchs.
+
+2010-01-24 17:17 Jochen Striepe
+
+ * t-prot: Fix newline stripping for locales.
+
2010-01-08 11:10 Jochen Striepe
* t-prot: Release as v2.12.
-# $Id: muttrc.t-prot,v 1.9 2002/12/29 03:52:57 jochen Exp $
+# $Id: muttrc.t-prot,v 1.10 2010/02/01 23:48:06 jochen Exp $
# This all works only if you have mutt-1.3.12 or newer
# or if you use something like the pagerfilter patch
# (http://www.escape.de/users/tolot/mutt/).
-set display_filter='t-prot -acelmtS -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'
+set display_filter='t-prot -acelmtS --bigq -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'
# toggle TOFU protection with ESC-0 and ESC-1
macro generic \e0 ":unset display_filter\n" "Turn TOFU protection off"
-macro generic \e1 ":set display_filter='t-prot -acelmtS -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'\n" "Turn TOFU protection on"
+macro generic \e1 ":set display_filter='t-prot -acelmtS --bigq -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'\n" "Turn TOFU protection on"
# same in pager mode - ugly but what the hell...
macro pager \e0 ":unset display_filter; exec exit\n:exec display-message\n" "Turn TOFU protection off"
-macro pager \e1 ":set display_filter='t-prot -acelmtS -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'; exec exit\n:exec display-message\n" "Turn TOFU protection on"
+macro pager \e1 ":set display_filter='t-prot -acelmtS --bigq -Mmutt --spass -L$HOME/.mutt/mlfooters -A$HOME/.mutt/adfooters'; exec exit\n:exec display-message\n" "Turn TOFU protection on"
# highlight TOFU protection:
color body brightmagenta black "^\\[---.*"
+++ /dev/null
---- t-prot 2010-01-08 12:10:26.000000000 +0100
-+++ t-prot-gol 2010-01-08 12:14:18.000000000 +0100
-@@ -4,7 +4,7 @@
- require 5.006;
- use strict;
- use Fcntl qw(O_EXCL O_WRONLY O_CREAT);
--use Getopt::Mixed qw(nextOption);
-+use Getopt::Long qw(:config gnu_getopt no_ignore_case);
- use constant VER => '2.12';
- use constant REV => '';
- use constant REL => q$Revision: 1.271 $=~m/(\d+(?:\.\d+)+)/;
-@@ -914,84 +914,83 @@
- (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:
-+my ($_t1, $_t2, $_t3, $_t4, $_t5, $_t6, $_t7, $_t8, $_t9, $_ta, $_tb) = undef;
-+
- # 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 groupwise'.
-- ' help>h 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; }
-- elsif ($opt eq 'bigq') {
-- if ($val !~ /^(?:(\d+)(?:,(\d+))?)?$/) { help(); }
-- $bigqn = $1?$1:30;
-- $bigqx = $2?$2:10;
-- if ($bigqn<=0 || $bigqx<=0 || $bigqn<=$bigqx) { help(); }
-- }
-- elsif ($opt eq 'body') { $nohdr = 1; $hdrs = 1; }
-- elsif ($opt eq 'c') { $cr = 1; }
-- elsif ($opt eq 'check') {
-- $check = 1;
-- while ($val && $val =~ /^([^,\s]+)(?:,(\S+))?$/) {
-- my $foo = $1;
-- $val = $2;
--
-- if ($foo =~ /^ratio(?:=(0?\.\d+))?$/) {
-- $check_ratio = $1?$1:0.75;
-- }
-- }
-- }
-- elsif ($opt eq 'd') { $sysl = 1; }
-- elsif ($opt eq 'diff') { $diff = 1; }
-- elsif ($opt eq 'e') { $elli = 1; }
-- elsif ($opt eq 'ftr-ad') { $ftr_ad = 1; $ad = 1; }
-- elsif ($opt eq 'ftr-ml') { $ftr_ml = 1; $ml = 1; }
-- elsif ($opt eq 'groupwise') { $gw = 1; }
-- elsif ($opt eq 'i') { $ifile = $val; }
-- elsif ($opt eq 'k') { $kamm = 1; }
-- elsif ($opt eq 'kminl') { $kminl = $val; $kamm = 1; }
-- elsif ($opt eq 'kmaxl') { $kmaxl = $val; $kamm = 1; }
-- elsif ($opt eq 'kdiff') { $kdiff = $val; $kamm = 1; }
-- elsif ($opt eq 'L') { $footers = $val; }
-- elsif ($opt eq 'l') { $ml = 1; }
-- 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);
-+if (!Getopt::Long::GetOptions(
-+ 'a' => \$ad,
-+ 'A=s' => \$ads,
-+ 'bigq:s' => \$_t1,
-+ 'c' => \$cr,
-+ 'check:s' => \$_t9,
-+ 'debug|d' => \$sysl,
-+ 'diff' => \$diff,
-+ 'e' => \$elli,
-+ 'ftr-ad' => \$ftr_ad,
-+ 'ftr-ml' => \$ftr_ml,
-+ 'groupwise' => \$gw,
-+ 'help|h' => \$_t2,
-+ 'i=s' => \$ifile,
-+ 'k' => \$kamm,
-+ 'kminl=i' => \$_t3,
-+ 'kmaxl=i' => \$_t4,
-+ 'kdiff=i' => \$_t5,
-+ 'L=s' => \$footers,
-+ 'l' => \$ml,
-+ 'lax-security' => \$lax,
-+ 'locale=s' => \$locale,
-+ 'max-lines=i' => \$maxlines,
-+ 'ms-smart' => \$ms_smart,
-+ 'mua|M=s' => \$_t7,
-+ 'm' => \$ms,
-+ 'o=s' => \$ofile,
-+ 'P=s' => \$boun,
-+ 'p:s' => \$_t8,
-+ 'pgp-short' => \$pgpshort,
-+ 'pgp-move' => \$pgpmove,
-+ 'pgp-move-vrf' => \$pgpmovevrf,
-+ 'r' => \$hdrs,
-+ 'S:i' => \$_t6,
-+ 's' => \$sig,
-+ 'sigsmax:i' => \$_ta,
-+ 'spass' => \$spass,
-+ 't' => \$trad,
-+ 'version|v' => \$_tb,
-+ 'w' => \$trsp
-+ )) {
-+ help();
-+}
-
-- if ($mua eq 'mutt') {
-- # mutt still displays the message when ^C'ing pgp verification:
-- $SIG{'INT'} = 'sigint_handler';
-- }
-+# clean up temp vals:
-+if (defined $_t1) {
-+ if ($_t1 !~ /^(?:(\d+)(?:,(\d+))?)?$/) { help(); }
-+ $bigqn = $1?$1:30;
-+ $bigqx = $2?$2:10;
-+ if ($bigqn<=0 || $bigqx<=0 || $bigqn<=$bigqx) { help(); }
-+}
-+if (defined $_t2) { help(); }
-+if (defined $_t3) { $kminl = $_t3; $kamm = 1; }
-+if (defined $_t4) { $kmaxl = $_t4; $kamm = 1; }
-+if (defined $_t5) { $kdiff = $_t5; $kamm = 1; }
-+if (defined $_t6) { $lsig = $_t6 ? $_t6 : $maxsig; }
-+if (defined $_t7) {
-+ $mua = lc($_t7);
-+ # mutt still displays the message when ^C'ing pgp verification:
-+ if ($mua eq 'mutt') { $SIG{'INT'} = 'sigint_handler'; }
-+}
-+if (defined $_t8) { $mda = $_t8 ? $_t8 : '1'; }
-+if (defined $_t9) {
-+ $check = 1;
-+ while ($_t9 && $_t9 =~ /^([^,\s]+)(?:,(\S+))?$/) {
-+ my $foo = $1;
-+ $_t9 = $2;
-+ if ($foo =~ /^ratio(?:=(0?\.\d+))?$/) { $check_ratio = $1?$1:0.75; }
- }
-- elsif ($opt eq 'o') { $ofile = $val; }
-- elsif ($opt eq 'P') { $boun = $val; }
-- elsif ($opt eq 'p') { $mda = $val ? $val : '1'; }
-- elsif ($opt eq 'pgp-short') { $pgpshort = 1; }
-- elsif ($opt eq 'pgp-move') { $pgpmove = 1; }
-- elsif ($opt eq 'pgp-move-vrf') { $pgpmovevrf = 1; }
-- elsif ($opt eq 'r') { $hdrs = 1; }
-- elsif ($opt eq 'S') { $lsig = $val ? $val : $maxsig; }
-- elsif ($opt eq 's') { $sig = 1; }
-- elsif ($opt eq 'sigsmax') { $sign = $val ? $val : undef; }
-- elsif ($opt eq 'spass') { $spass = 1; }
-- elsif ($opt eq 't') { $trad = 1; }
-- elsif ($opt eq 'v') { version(); }
-- elsif ($opt eq 'w') { $trsp = 1; }
-- else { help(); }
- }
--Getopt::Mixed::cleanup();
--if (($ml && $footers eq '')|| # no -l without -L
-- ($ad && $ads eq '')|| # no -a without -A
-- ($nohdr && $pgpshort)|| # --body and --pgp-short are like oil and water
-- ($ifile eq '')|| # no empty -i
-- ($ofile eq '')) # no empty -o
--{ help(); }
--
-+if (defined $_ta) { $sign = $_ta ? $_ta : undef; }
-+if (defined $_tb) { version(); }
-+if ($ms_smart) { $ms = 1; }
-
- if ($mua eq 'mutt') {
- if (defined $locale && $locale ne '' && $locale ne 'C' && $locale ne 'POSIX') {
-@@ -1053,11 +1052,15 @@
- m/^([^%]*)/;
- }
- }
--
--}
--else {
-- if ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
- }
-+elsif ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
-+
-+if (($ml && $footers eq '')|| # no -l without -L
-+ ($ad && $ads eq '')|| # no -a without -A
-+ ($nohdr && $pgpshort)|| # --body and --pgp-short are like oil and water
-+ ($ifile eq '')|| # no empty -i
-+ ($ofile eq '')) # no empty -o
-+{ help(); }
-
-
- # Read message:
--- /dev/null
+--- t-prot 2010-02-01 23:34:42.000000000 +0100
++++ t-prot-gol 2010-02-01 23:35:27.000000000 +0100
+@@ -4,7 +4,7 @@
+ require 5.006;
+ use strict;
+ use Fcntl qw(O_EXCL O_WRONLY O_CREAT);
+-use Getopt::Mixed qw(nextOption);
++use Getopt::Long qw(:config gnu_getopt no_ignore_case);
+ use constant VER => '2.13';
+ use constant REV => '';
+ use constant REL => q$Revision: 1.276 $=~m/(\d+(?:\.\d+)+)/;
+@@ -916,84 +916,83 @@
+ (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:
++my ($_t1, $_t2, $_t3, $_t4, $_t5, $_t6, $_t7, $_t8, $_t9, $_ta, $_tb) = undef;
++
+ # 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 groupwise'.
+- ' help>h 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; }
+- elsif ($opt eq 'bigq') {
+- if ($val !~ /^(?:(\d+)(?:,(\d+))?)?$/) { help(); }
+- $bigqn = $1?$1:30;
+- $bigqx = $2?$2:10;
+- if ($bigqn<=0 || $bigqx<=0 || $bigqn<=$bigqx) { help(); }
+- }
+- elsif ($opt eq 'body') { $nohdr = 1; $hdrs = 1; }
+- elsif ($opt eq 'c') { $cr = 1; }
+- elsif ($opt eq 'check') {
+- $check = 1;
+- while ($val && $val =~ /^([^,\s]+)(?:,(\S+))?$/) {
+- my $foo = $1;
+- $val = $2;
+-
+- if ($foo =~ /^ratio(?:=(0?\.\d+))?$/) {
+- $check_ratio = $1?$1:0.75;
+- }
+- }
+- }
+- elsif ($opt eq 'd') { $sysl = 1; }
+- elsif ($opt eq 'diff') { $diff = 1; }
+- elsif ($opt eq 'e') { $elli = 1; }
+- elsif ($opt eq 'ftr-ad') { $ftr_ad = 1; $ad = 1; }
+- elsif ($opt eq 'ftr-ml') { $ftr_ml = 1; $ml = 1; }
+- elsif ($opt eq 'groupwise') { $gw = 1; }
+- elsif ($opt eq 'i') { $ifile = $val; }
+- elsif ($opt eq 'k') { $kamm = 1; }
+- elsif ($opt eq 'kminl') { $kminl = $val; $kamm = 1; }
+- elsif ($opt eq 'kmaxl') { $kmaxl = $val; $kamm = 1; }
+- elsif ($opt eq 'kdiff') { $kdiff = $val; $kamm = 1; }
+- elsif ($opt eq 'L') { $footers = $val; }
+- elsif ($opt eq 'l') { $ml = 1; }
+- 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);
++if (!Getopt::Long::GetOptions(
++ 'a' => \$ad,
++ 'A=s' => \$ads,
++ 'bigq:s' => \$_t1,
++ 'c' => \$cr,
++ 'check:s' => \$_t9,
++ 'debug|d' => \$sysl,
++ 'diff' => \$diff,
++ 'e' => \$elli,
++ 'ftr-ad' => \$ftr_ad,
++ 'ftr-ml' => \$ftr_ml,
++ 'groupwise' => \$gw,
++ 'help|h' => \$_t2,
++ 'i=s' => \$ifile,
++ 'k' => \$kamm,
++ 'kminl=i' => \$_t3,
++ 'kmaxl=i' => \$_t4,
++ 'kdiff=i' => \$_t5,
++ 'L=s' => \$footers,
++ 'l' => \$ml,
++ 'lax-security' => \$lax,
++ 'locale=s' => \$locale,
++ 'max-lines=i' => \$maxlines,
++ 'ms-smart' => \$ms_smart,
++ 'mua|M=s' => \$_t7,
++ 'm' => \$ms,
++ 'o=s' => \$ofile,
++ 'P=s' => \$boun,
++ 'p:s' => \$_t8,
++ 'pgp-short' => \$pgpshort,
++ 'pgp-move' => \$pgpmove,
++ 'pgp-move-vrf' => \$pgpmovevrf,
++ 'r' => \$hdrs,
++ 'S:i' => \$_t6,
++ 's' => \$sig,
++ 'sigsmax:i' => \$_ta,
++ 'spass' => \$spass,
++ 't' => \$trad,
++ 'version|v' => \$_tb,
++ 'w' => \$trsp
++ )) {
++ help();
++}
+
+- if ($mua eq 'mutt') {
+- # mutt still displays the message when ^C'ing pgp verification:
+- $SIG{'INT'} = 'sigint_handler';
+- }
++# clean up temp vals:
++if (defined $_t1) {
++ if ($_t1 !~ /^(?:(\d+)(?:,(\d+))?)?$/) { help(); }
++ $bigqn = $1?$1:30;
++ $bigqx = $2?$2:10;
++ if ($bigqn<=0 || $bigqx<=0 || $bigqn<=$bigqx) { help(); }
++}
++if (defined $_t2) { help(); }
++if (defined $_t3) { $kminl = $_t3; $kamm = 1; }
++if (defined $_t4) { $kmaxl = $_t4; $kamm = 1; }
++if (defined $_t5) { $kdiff = $_t5; $kamm = 1; }
++if (defined $_t6) { $lsig = $_t6 ? $_t6 : $maxsig; }
++if (defined $_t7) {
++ $mua = lc($_t7);
++ # mutt still displays the message when ^C'ing pgp verification:
++ if ($mua eq 'mutt') { $SIG{'INT'} = 'sigint_handler'; }
++}
++if (defined $_t8) { $mda = $_t8 ? $_t8 : '1'; }
++if (defined $_t9) {
++ $check = 1;
++ while ($_t9 && $_t9 =~ /^([^,\s]+)(?:,(\S+))?$/) {
++ my $foo = $1;
++ $_t9 = $2;
++ if ($foo =~ /^ratio(?:=(0?\.\d+))?$/) { $check_ratio = $1?$1:0.75; }
+ }
+- elsif ($opt eq 'o') { $ofile = $val; }
+- elsif ($opt eq 'P') { $boun = $val; }
+- elsif ($opt eq 'p') { $mda = $val ? $val : '1'; }
+- elsif ($opt eq 'pgp-short') { $pgpshort = 1; }
+- elsif ($opt eq 'pgp-move') { $pgpmove = 1; }
+- elsif ($opt eq 'pgp-move-vrf') { $pgpmovevrf = 1; }
+- elsif ($opt eq 'r') { $hdrs = 1; }
+- elsif ($opt eq 'S') { $lsig = $val ? $val : $maxsig; }
+- elsif ($opt eq 's') { $sig = 1; }
+- elsif ($opt eq 'sigsmax') { $sign = $val ? $val : undef; }
+- elsif ($opt eq 'spass') { $spass = 1; }
+- elsif ($opt eq 't') { $trad = 1; }
+- elsif ($opt eq 'v') { version(); }
+- elsif ($opt eq 'w') { $trsp = 1; }
+- else { help(); }
+ }
+-Getopt::Mixed::cleanup();
+-if (($ml && $footers eq '')|| # no -l without -L
+- ($ad && $ads eq '')|| # no -a without -A
+- ($nohdr && $pgpshort)|| # --body and --pgp-short are like oil and water
+- ($ifile eq '')|| # no empty -i
+- ($ofile eq '')) # no empty -o
+-{ help(); }
+-
++if (defined $_ta) { $sign = $_ta ? $_ta : undef; }
++if (defined $_tb) { version(); }
++if ($ms_smart) { $ms = 1; }
+
+ if ($mua eq 'mutt') {
+ if (defined $locale && $locale ne '' && $locale ne 'C' && $locale ne 'POSIX') {
+@@ -1058,6 +1057,13 @@
+
+ }
+ elsif ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
++
++if (($ml && $footers eq '')|| # no -l without -L
++ ($ad && $ads eq '')|| # no -a without -A
++ ($nohdr && $pgpshort)|| # --body and --pgp-short are like oil and water
++ ($ifile eq '')|| # no empty -i
++ ($ofile eq '')) # no empty -o
++{ help(); }
+
+
+ # Read message:
#!/usr/bin/perl -w
-# $Id: t-prot,v 1.271 2010/01/08 11:10:26 jochen Exp $
+# $Id: t-prot,v 1.277 2010/02/06 03:29:23 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.12';
+use constant VER => '2.13';
use constant REV => '';
-use constant REL => q$Revision: 1.271 $=~m/(\d+(?:\.\d+)+)/;
+use constant REL => q$Revision: 1.277 $=~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';
);
-# 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
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] !~
}
}
-else {
- if ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
-}
+elsif ($ms_smart || $pgpshort || $pgpmove || $pgpmovevrf) { help(); }
# Read message:
-.\" $Id: t-prot.1,v 1.144 2010/01/08 11:08:50 jochen Exp $
+.\" $Id: t-prot.1,v 1.148 2010/02/07 14:31:14 jochen Exp $
.\"
-.TH T-PROT "1" "January 2010" "T-PROT"
+.TH T-PROT "1" "February 2010" "T-PROT"
.SH NAME
-t-prot \- TOFU Protection - Display Filter for RFC 2822 messages
+t-prot \- TOFU Protection - Display Filter for RFC 5322 messages
.SH SYNOPSIS
.BI "t\-prot [" OPTIONS "]..."
.SH DESCRIPTION
as well as squeezing sequences of blank lines or punctuation.
.br
The filter is written in Perl and relies on input to be a single
-message conforming to RFC 822 or its successor, RFC 2822. Messages
-conforming to RFCs 2045-2049 should be treated reasonably correct.
+message conforming to RFC 822 or its successors, RFC 2822 and RFC 5322.
+Messages conforming to RFCs 2045-2049 should be treated reasonably correct.
.PP
Already reformatted messages are handled well: the script was
initially designed to cope with the output of the MUA mutt (which
.TP
.B "\-c"
"compress":
-Squeezes a sequence of blank lines to two blank lines at maximum.
+Squeezes a sequence of blank lines to just two blank lines.
.TP
.BR "\-\-check" [=FLAGS]
Run checks. If successful, print an error message and quit with
.br
If the quoting ratio is n or more, the message is rejected. Must be
between 0 and 1, or else it is entirely disabled. Default is 0.75
-(i.e., three quarters are quoted).
+(i.e., 75% of the message lines are quotes).
.TP
.B "\-d, \-\-debug"
-"debug":
Print envelope info to syslog when bouncing TOFU contaminated email.
Default syslog facility is mail.debug. Requires
.BR \-p .
.BR "\-L" =DIRECTORY.
.TP
.B "\-\-groupwise"
-"delete Groupwise style TOFU":
Hides TOFU as produced by Novell Groupwise.
.TP
.B "\-h, \-\-help"
-"help":
Displays a short help text with a summary on all options, and exits.
.TP
.BR "\-i" =FILE
between mailing lists or with undetected signature attempts.
.TP
.B "\-v, \-\-version"
-"version info":
Prints the current version number and release date, and exits.
.SH ENVIRONMENT
The environment variables
.SH IDEAS AND INSPIRATION
Many good ideas, bug reports and support from (in alphabetical order) Bjoern
Buerger, Bjoern Laessig, Christian Borss, Gerfried Fuchs, Martin Neitzel, Martin
-Dietze, Ralf Doeblitz, Sven Guckes and many more (see the ChangeLog for active
-contributors). Many thanks to all of them!
+Dietze, Matthias Kilian, Ralf Doeblitz, Sven Guckes and many more (see the
+ChangeLog for active contributors). Many thanks to all of them!
.sp
Many thanks to Gerhard H. Wrodnigg who uses a TOFU protection script
in order to keep the responses to his cancel bot reasonably short. The
.BR perl (1),
.BR aliases (5),
.sp
-RFCs 2045-2049 and 2822,
+RFCs 2045-2049 and 5322,
.sp
.I http://got.to/quote/
(German language),