Detect failure of queue command, use generic path by default
authorJamie Cameron <jcameron@webmin.com>
Fri, 14 Oct 2011 00:05:55 +0000 (17:05 -0700)
committerJamie Cameron <jcameron@webmin.com>
Fri, 14 Oct 2011 00:05:55 +0000 (17:05 -0700)
postfix/config
postfix/index.cgi
postfix/mailq.cgi
postfix/postfix-lib.pl

index e57bf6a..d89ca95 100644 (file)
@@ -9,7 +9,7 @@ postfix_super_command=/usr/sbin/postsuper
 max_records=200
 perpage=20
 mailq_dir=/var/spool/postfix
-mailq_cmd=/usr/bin/postqueue -p
+mailq_cmd=postqueue -p
 postcat_cmd=/usr/sbin/postcat
 sort_mode=0
 fwd_mode=0
index a6da8d4..c037a7f 100755 (executable)
@@ -101,7 +101,7 @@ foreach $oitem (@onames)
                                                   : $text{$oitem . "_title"});
                if ($oitem eq 'mailq' && !$config{'mailq_count'}) {
                        # Count the queue
-                       local @mqueue = &list_queue();
+                       local @mqueue = &list_queue(0);
                        local $mcount = scalar(@mqueue);
                        $otitles[$#otitles] .=
                                "<br>".&text('mailq_count', $mcount);
index f93be78..c42ac07 100755 (executable)
@@ -10,7 +10,7 @@ $access{'mailq'} || &error($text{'mailq_ecannot'});
 &ui_print_header(undef, $text{'mailq_title'}, "");
 
 # Get queued messages and sort
-@qfiles = &list_queue();
+@qfiles = &list_queue(1);
 if ($config{'mailq_sort'} == 0) {
        @qfiles = sort { $a->{'id'} cmp $b->{'id'} } @qfiles;
        }
index 220d7de..5b97661 100755 (executable)
@@ -1307,15 +1307,18 @@ if (!scalar(@mail_system_cache)) {
 return wantarray ? @mail_system_cache : $mail_system_cache[0];
 }
 
-# list_queue()
+# list_queue([error-on-failure])
 # Returns a list of strutures, each containing details of one queued message
 sub list_queue
 {
+local ($throw) = @_;
 local @qfiles;
-&open_execute_command(MAILQ, $config{'mailq_cmd'}, 1, 1);
-while(<MAILQ>) {
-       next if (/^(\S+)\s+is\s+empty/i || /^\s+Total\s+requests:/i);
-       if (/^([^\s\*\!]+)[\*\!]?\s*(\d+)\s+(\S+\s+\S+\s+\d+\s+\d+:\d+:\d+)\s+(.*)/) {
+local $out = &backquote_command("$config{'mailq_cmd'} 2>&1 </dev/null");
+&error("$config{'mailq_cmd'} failed : ".&html_escape($out)) if ($? && $throw);
+foreach my $l (split(/\r?\n/, $out)) {
+       next if ($l =~ /^(\S+)\s+is\s+empty/i ||
+                $l =~ /^\s+Total\s+requests:/i);
+       if ($l =~ /^([^\s\*\!]+)[\*\!]?\s*(\d+)\s+(\S+\s+\S+\s+\d+\s+\d+:\d+:\d+)\s+(.*)/) {
                local $q = { 'id' => $1, 'size' => $2,
                              'date' => $3, 'from' => $4 };
                if (defined(&parse_mail_date)) {
@@ -1327,14 +1330,13 @@ while(<MAILQ>) {
                        }
                push(@qfiles, $q);
                }
-       elsif (/\((.*)\)/ && @qfiles) {
+       elsif ($l =~ /\((.*)\)/ && @qfiles) {
                $qfiles[$#qfiles]->{'status'} = $1;
                }
-       elsif (/^\s+(\S+)/ && @qfiles) {
+       elsif ($l =~ /^\s+(\S+)/ && @qfiles) {
                $qfiles[$#qfiles]->{'to'} .= "$1 ";
                }
        }
-close(MAILQ);
 return @qfiles;
 }