# Utility for searching and displaying queue information.
# Written by Matt Hubbard 15 August 2002
+#
+# Copyright (c) The Exim Maintainers 2021 - 2023
+# SPDX-License-Identifier: GPL-2.0-or-later
+# See the file NOTICE for conditions of use and distribution.
# Except when they appear in comments, the following placeholders in this
# source are replaced when it is turned into a runnable script:
# Routine for extracting the UTC timestamp from message ID
# lifted from eximstat utility
-# Version 1.2
+# Version 1.3
use strict;
BEGIN { pop @INC if $INC[-1] eq '.' };
$base = 62;
};
-if ($ARGV[0] eq '--version') {
+if ($ARGV[0] eq '--version' || $ARGV[0] eq '-v') {
print basename($0) . ": $0\n",
"build: EXIM_RELEASE_VERSIONEXIM_VARIANT_VERSION\n",
"perl(runtime): $]\n";
exit 0;
}
-getopts('hf:r:y:o:s:C:zxlibRca',\%opt);
-if ($ARGV[0]) { &help; exit;}
-if ($opt{h}) { &help; exit;}
+if (!getopts('hf:r:y:o:s:C:zxlibRcaG:E:',\%opt)) { &help; exit; }
+if ($opt{h}) { &help; exit; }
+if ($ARGV[0] || !($opt{f} || $opt{r} || $opt{s} || $opt{y} || $opt{o} || $opt{z} || $opt{x} || $opt{c}))
+ { &help; exit(1); }
if ($opt{a}) { $eargs = '-bp'; }
if ($opt{C} && -e $opt{C} && -f $opt{C} && -R $opt{C}) { $eargs .= ' -C '.$opt{C}; }
+if ($opt{G}) { $eargs .= ' -qG'.$opt{G}; }
+if ($opt{E}) { $exim = $opt{E}; }
# Read message queue output into hash
&collect();
-h This help message.
-C Specify which exim.conf to use.
+ -E Specify exim binary to use.
Selection criteria:
-f <regexp> Match sender address sender (field is "< >" wrapped)
-o <seconds> Message older than
-z Frozen messages only (exclude non-frozen)
-x Non-frozen messages only (exclude frozen)
+ -G <queuename> Match in given queue only
[ NB: for regexps, provided string sits in /<string>/ ]
chomp();
my $line = $_;
#Should be 1st line of record, if not error.
- if ($line =~ /^\s*(\w+)\s+((?:\d+(?:\.\d+)?[A-Z]?)?)\s*(\w{6}-\w{6}-\w{2})\s+(<.*?>)/) {
- my $msg = $3;
- $id{$msg}{age} = $1;
- $id{$msg}{size} = $2;
- $id{$msg}{from} = $4;
+ if ($line =~ /^\s*(?<age>\w+)
+ \s+(?<size>(?:\d+(?:\.\d+)?[A-Z]?)?)
+ \s*(?<msgid>(?:\w{6}-\w{6}-\w{2}|\w{6}-\w{11}-\w{4})) # old, 2023 msgid formats
+ \s+(?<from><.*?>)/x) {
+ my $msg = $+{msgid};
+ $id{$msg}{age} = $+{age};
+ $id{$msg}{size} = $+{size};
+ $id{$msg}{from} = $+{from};
$id{$msg}{birth} = &msg_utc($msg);
$id{$msg}{ages} = time - $id{$msg}{birth};
- if ($line =~ /\*\*\* frozen \*\*\*$/) {
- $id{$msg}{frozen} = 1;
- } else {
- $id{$msg}{frozen} = 0;
- }
+ $id{$msg}{frozen} = ($line =~ /\*\*\* frozen \*\*\*$/) ? 1 : 0;
while(<QUEUE> =~ /\s+(.*?\@.*)$/) {
push(@{$id{$msg}{rcpt}},$1);
}