#!/usr/bin/perl -w
-# $Id: t-prot,v 1.227 2005/03/01 15:20:49 jochen Exp $
+# $Id: t-prot,v 1.236 2005/04/25 16:35:56 jochen Exp $
require 5.006;
use strict;
use Fcntl qw(O_EXCL O_WRONLY O_CREAT);
use Getopt::Mixed qw(nextOption);
-use constant VER => '1.98';
+use constant VER => '1.101';
use constant REV => '';
-use constant REL => q$Revision: 1.227 $=~m/(\d+(?:\.\d+)+)/;
+use constant REL => q$Revision: 1.236 $=~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';
$ad $ads $bigqn $bigqx $boun $check $check_ratio $cr $diff $elli
$footers $ftr_ad $ftr_ml $hdrs $indent $kamm $kdiff $kminl $kmaxl
$lax $lsig $maxsig $mda $ml $ms $ms_smart $msg_quote $msg_ratio
- $mua $ofile $pgpshort $pgpmove $pgpmovevrf $sig $sigint $sign
- $spass $spass_prefix $sysl $trad $trsp
+ $mua $nohdr $ofile $pgpshort $pgpmove $pgpmovevrf $sig $sigint
+ $sign $spass $spass_prefix $sysl $trad $trsp
$gpg_WARNING $gpg_Warning $gpg_Cantcheck $gpg_aka $gpg_bad
$gpg_expired $gpg_good $gpg_bug
-A=DIRECTORY ad footer directory, treat ad footers as signature
--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 merge multiple blank lines
--check[=FLAGS] check various criteria, print error message and quit;
see man page for details
# underlining some part of the line above (using '^')
# nor begin with a whitespace,
# * the 1st line must not end with a hyphen,
+ # * the 2nd line must not indicate content was deleted,
# * the 2nd line must not be some mutt(1) commentary,
# * there must not be a valid word wrap to produce a longer
# 1st line (if not quoted),
($$L[$x+1] !~ /^$/) &&
($$L[$x+1] !~ /^[\s^]/) &&
($$L[$x] !~ /-$/) &&
+ ($$L[$x+1] !~ /^\Q[...]\E\s*$/) &&
($mua ne 'mutt' || $$L[$x+1] !~ /^(?:\e.+?\a)?\[-- .* --]/) &&
(length($$L[$x])+index($$L[$x+1], ' ')>$max ||
(index($$L[$x+1], ' ')<0 && length($$L[$x])+length($$L[$x+1])>$max)) &&
if ($$H[$m] =~ /^From:/) {
$from = $$H[$m];
$m++;
- while ($$H[$m] =~ /^\s/) { $from .= $$H[$m]; $m++; }
+ while (exists($$H[$m]) && $$H[$m] =~ /^\s/) { $from .= $$H[$m]; $m++; }
last;
}
}
# First, remove and store lines we might need later...
# Remove headers:
- for ($x=0; $x<$#$lines; $x++) { if (@$lines[$x] =~ /^$/) { last; }; }
- @hdr = @$lines[0..$x];
- splice(@$lines, 0, $x+1);
+ if (!$nohdr) {
+ for ($x=0; $x<$#$lines; $x++) { if (@$lines[$x] =~ /^$/) { last; }; }
+ @hdr = @$lines[0..$x];
+ splice(@$lines, 0, $x+1);
+ }
# remember the original body lines count
my $linecount = scalar(@$lines);
+ # Remove ML footers:
+ remove_footers($lines, \@ftr, $footers, undef, $ftr_ml);
+
+ # Remove ad footers:
+ remove_footers($lines, \@ads, $ads, undef, $ftr_ad);
# See if we have a multipart content type. If yes, see if it is already
- # ripped (e.g. by mutt(1)), otherwise only leave the first part if it
- # is plain text (if not, we are done - non-text messages are not our
- # business).
+ # ripped (e.g. by you MUA, assuming it does not get special treatment with
+ # --mua=foo), otherwise only leave the first part if it is plain text (if
+ # not, we are done - non-text messages are not our business).
if ($mua ne 'mutt') {
for ($x=0; $x<scalar(@hdr); $x++) {
if ($hdr[$x] =~ /^Content-Type:\s+(.*)$/i) {
}
@bo1 = @$lines[0..$x];
splice(@$lines, 0, $x+1);
+
+ # remove mailing list and ad footers within this
+ # attachment:
+ remove_footers($lines, \@ftr, $footers, undef, $ftr_ml);
+ remove_footers($lines, \@ads, $ads, undef, $ftr_ad);
+
last;
}
else {
}
}
- # Remove ML footers:
- remove_footers($lines, \@ftr, $footers, undef, $ftr_ml);
-
- # Remove ad footers:
- remove_footers($lines, \@ads, $ads, undef, $ftr_ad);
-
if ($mua eq 'mutt') {
# See if we find pgp output generated by mutt before we scramble
# the thing. If yes, see if we can beautify it.
# command line switches
($ad, $ads, $bigqn, $bigqx, $check, $cr, $sysl, $diff, $elli, $footers, $lax,
- $ml, $ms, $ms_smart, $mda, $mua, $hdrs, $kamm, $lsig, $sig, $sigint,
+ $ml, $ms, $ms_smart, $mda, $mua, $hdrs, $kamm, $lsig, $nohdr, $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);
my $ifile = '-'; # use STDIN if nothing specified
# 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 check:s debug>d diff ftr-ad ftr-ml help>h kminl=i'.
- ' kmaxl=i kdiff=i lax-security locale=s ms-smart mua>M pgp-short'.
- ' pgp-move pgp-move-vrf sigsmax:i spass version>v');
+ ' s t v w bigq:s body check:s debug>d diff ftr-ad ftr-ml help>h'.
+ ' kminl=i kmaxl=i kdiff=i lax-security locale=s 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; }
$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;
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(); }