#!/usr/bin/perl -w
-# $Id: t-prot,v 1.319 2013/10/29 11:39:43 jochen Exp $
+# $Id: t-prot,v 1.330 2015/03/26 08:59:50 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 => '3.0';
+use constant VER => '3.4';
use constant REV => '';
-use constant REL => q$Revision: 1.319 $=~m/(\d+(?:\.\d+)+)/;
+use constant REL => q$Revision: 1.330 $=~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';
# 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
--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!
-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
if ($$L[$x]=~/^(?:\e[^\a]+\a)?
(?:\Q$mutt_pgpoutstart\E|\Q$mutt_ssloutstart\E)/ox) {
my $from;
- for (my $m=0; $m<scalar(@$H); $m++) {
- if (index($$H[$m], 'From:')==0) {
- $from = $$H[$m];
- $m++;
- while (exists($$H[$m]) && $$H[$m] =~ /^\s/)
- { $from .= $$H[$m]; $m++; }
- last;
+ if ($pgpshort) {
+ for (my $m=0; $m<scalar(@$H); $m++) {
+ if (index($$H[$m], 'From:')==0) {
+ $from = $$H[$m];
+ $m++;
+ while (exists($$H[$m]) && $$H[$m] =~ /^\s/)
+ { $from .= $$H[$m]; $m++; }
+ last;
+ }
+ }
+ if (defined($from)) {
+ ($from) =
+ $from=~m/(\w[\w.+-]*@(?:[\w.+-]+\.)+[A-Za-z]{2,})/;
}
}
- ($from) = $from=~m/(\w[\w.+-]*@(?:[\w.+-]+\.)+[A-Za-z]{2,})/;
my $uid = 1;
if ($pgpshort && index($$L[$i], "gpg: $gpg_aka")==0) {
$uid++;
- if ($uid>1 && index($$L[$i], $from)<0) {
+ if (!defined($from) ||
+ ($uid>1 && index($$L[$i], $from)<0)) {
splice(@$L, $i, 1);
splice(@$V, $i, 1);
$i--;
# bloat this array if you want more internationalization:
my @tofu = ('Original Message',
'Original-Nachricht',
- 'Urspr.ngliche Nachricht',
+ 'Urspr..?ngliche Nachricht',
'Mensagem original',
'Ursprungligt meddelande',
'Oorspronkelijk bericht',
$$lines[$x] =~ /^>>> On [A-Z][a-z][a-z]?, [A-Z][a-z][a-z]? \d\d?, \d\d\d\d at [ \d]\d:\d\d [AP]M, in message/))) {
$x++;
$trad = 0;
- $bigqn = 0;
+ if ($k) { $bigqn = 0; }
last DONE;
}
}
if (defined $_t_mua) {
$mua = lc($_t_mua);
# mutt still displays the message when ^C'ing pgp verification:
- if ($mua eq 'mutt') { $SIG{'INT'} = 'sigint_handler'; }
+ if ($mua eq 'mutt' || $mua eq 'mutt-kz') {
+ $SIG{'INT'} = 'sigint_handler';
+ }
}
if (defined $_t_redir) { $mda = $_t_redir ? $_t_redir : '1'; }
if (defined $_t_check) {
if (defined $_t_cr) { $cr = $_t_cr ? $_t_cr : $crshrink; }
if ($ms_smart) { $ms = 1; }
-if ($mua eq 'mutt') {
- if (defined $locale && $locale ne '' && $locale ne 'C' && $locale ne 'POSIX') {
+if ($mua eq 'mutt' || $mua eq 'mutt-kz') {
+ if (defined $locale &&
+ $locale ne '' && $locale ne 'C' && $locale ne 'POSIX') {
eval { require Locale::gettext; };
if ($@) { warn $@; exit(EX_SOFTWARE); } else {
- Locale::gettext::textdomain('mutt');
+ Locale::gettext::textdomain($mua);
($mutt_attachment) =
Locale::gettext::gettext("[-- Attachment #%d") =~
m/^([^%]*)/;
Locale::gettext::gettext("... this is a bug (%s:%d:%s)\n") =~
m/^([^%]*)/;
}
+ # mutt and mutt-kz right now only differ in the gettext domain name,
+ # so after fetching the gettext lines we treat them the same:
+ $mua = 'mutt';
}
}