# that are specific to certain file types, though there are also some of those
# inline too.
-while(<IN>)
+LINE: while(<IN>)
{
RESET_AFTER_EXTRA_LINE_READ:
# Custom munges
s/Exim\sstatistics\sfrom\s\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d\sto\s
\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d/Exim statistics from <time> to <time>/x;
+ # Treat ECONNRESET the same as ECONNREFUSED. At least some systems give
+ # us the former on a new connection.
+ s/(could not connect to .*: Connection) reset by peer$/$1 refused/;
# ======== TLS certificate algorithms ========
# Test machines might have various different TLS library versions supporting
# signature algorithm names
s/RSA-SHA1/RSA-SHA/;
+ # -d produces a list of environement variables as they are checked if they exist in the
+ # in the environment. Unfortunately this list isn't always in the same order. For now we
+ # just remove this list
+ #
+ if (/^\w+ in keep_environment/)
+ {
+ my @lines = $_;
+ while (<IN>)
+ {
+ if (/^\w+ in keep_environment/)
+ {
+ push @lines, $_;
+ next;
+ }
+ print MUNGED sort grep { !/^(SHLVL|_) / } @lines;
+ redo LINE;
+ }
+ }
+
# ======== Caller's login, uid, gid, home, gecos ========
my($aux_info) = $_[4];
my($yield) = 1;
+our %ENV = map { $_ => $ENV{$_} } grep { /^(?:USER|SHELL|PATH|TERM|EXIM_TEST_.*)$/ } keys %ENV;
+
if (/^(\d+)\s*$/) # Handle unusual return code
{
my($r) = $_[2];
my(@temp);
print ">> ./eximdir/exim_dumpdb $parm_cwd/spool $which\n" if $debug;
open(IN, "./eximdir/exim_dumpdb $parm_cwd/spool $which |");
- @temp = <IN>;
- close(IN);
- if ($which eq "callout")
+ open(OUT, ">>test-stdout");
+ print OUT "+++++++++++++++++++++++++++\n";
+
+ if ($which eq "retry")
{
+ $/ = "\n ";
+ @temp = <IN>;
+ $/ = "\n";
+
@temp = sort {
- my($aa) = substr $a, 21;
- my($bb) = substr $b, 21;
- return $aa cmp $bb;
+ my($aa) = split(' ', $a);
+ my($bb) = split(' ', $b);
+ return $aa cmp $bb;
} @temp;
+
+ foreach $item (@temp)
+ {
+ $item =~ s/^\s*(.*)\n(.*)\n?\s*$/$1\n$2/m;
+ print OUT " $item\n";
+ }
}
- open(OUT, ">>test-stdout");
- print OUT "+++++++++++++++++++++++++++\n";
- print OUT @temp;
+ else
+ {
+ @temp = <IN>;
+ if ($which eq "callout")
+ {
+ @temp = sort {
+ my($aa) = substr $a, 21;
+ my($bb) = substr $b, 21;
+ return $aa cmp $bb;
+ } @temp;
+ }
+ print OUT @temp;
+ }
+
+ close(IN);
close(OUT);
return 1;
}
# not drop privilege when -C and -D options are present. To run the exim
# command as root, we use sudo.
-elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/)
+elsif (/^((?i:[A-Z\d_]+=\S+\s+)+)?(\d+)?\s*(sudo(?:\s+-u\s+(\w+))?\s+)?exim(_\S+)?\s+(.*)$/)
{
- $args = $5;
+ $args = $6;
my($envset) = (defined $1)? $1 : "";
- my($sudo) = (defined $3)? "sudo " : "";
- my($special)= (defined $4)? $4 : "";
+ my($sudo) = (defined $3)? "sudo " . (defined $4 ? "-u $4 ":"") : "";
+ my($special)= (defined $5)? $5 : "";
$wait_time = (defined $2)? $2 : 0;
# Return 2 rather than 1 afterwards