From 927a2c32d842e81cc90f09e80108b0771077cd88 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Tue, 2 Jul 2024 21:36:05 -0700 Subject: [PATCH] Show queue state in list --- postfix/lang/en | 1 + postfix/postfix-lib.pl | 41 ++++++++++++++++++++++++++--------------- postfix/view_mailq.cgi | 5 ++--- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/postfix/lang/en b/postfix/lang/en index 10f91f1b9..983da5a14 100644 --- a/postfix/lang/en +++ b/postfix/lang/en @@ -631,6 +631,7 @@ mailq_active=Active mailq_deferred=Deferred mailq_hold=Hold Selected mailq_unhold=Un-Hold Selected +mailq_dir=Queue state flushq_title=Flush Queue flushq_desc=Forcing the attempted delivery of mail with the command $1 .. diff --git a/postfix/postfix-lib.pl b/postfix/postfix-lib.pl index 9ce9e7196..f729e6239 100755 --- a/postfix/postfix-lib.pl +++ b/postfix/postfix-lib.pl @@ -1449,6 +1449,15 @@ foreach my $l (split(/\r?\n/, $out)) { $q->{'time'} = $t; } } + foreach my $dir (&list_mailq_directories()) { + my $f = substr($q->{'id'}, 0, 1); + my $path = "$config{'mailq_dir'}/$dir/$f/$q->{'id'}"; + if (-r $path) { + $q->{'dir'} = $dir; + $q->{'file'} = $file; + last; + } + } push(@qfiles, $q); } elsif ($l =~ /\((.*)\)/ && @qfiles) { @@ -1461,18 +1470,18 @@ foreach my $l (split(/\r?\n/, $out)) { return @qfiles; } +sub list_mailq_directories +{ +return ("active", "incoming", "deferred", "corrupt", "hold", "maildrop"); +} + # parse_queue_file(id) # Parses a postfix mail queue file into a standard mail structure sub parse_queue_file { -local @qfiles = ( &recurse_files("$config{'mailq_dir'}/active"), - &recurse_files("$config{'mailq_dir'}/incoming"), - &recurse_files("$config{'mailq_dir'}/deferred"), - &recurse_files("$config{'mailq_dir'}/corrupt"), - &recurse_files("$config{'mailq_dir'}/hold"), - &recurse_files("$config{'mailq_dir'}/maildrop"), - ); -local $f = $_[0]; +local ($f) = @_; +local @qfiles = map { &recurse_files("$config{'mailq_dir'}/$_") } + &list_mailq_directories(); local ($file) = grep { $_ =~ /\/$f$/ } @qfiles; return undef if (!$file); local $mode = 0; @@ -1508,7 +1517,7 @@ $mail->{'file'} = $file; my @st = stat($file); $mail->{'last_retry'} = $st[9]; if ($file =~ /^\Q$config{'mailq_dir'}\E\/([^\/]+)\//) { - $mail->{'mailq_dir'} = $1; + $mail->{'dir'} = $1; } return $mail; } @@ -1862,11 +1871,12 @@ foreach my $q (@$qfiles) { 'value' => $q->{'id'} }); push(@cols, &ui_link("view_mailq.cgi?id=$q->{'id'}",$q->{'id'})); local $size = &nice_size($q->{'size'}); - push(@cols, "$q->{'date'}"); - push(@cols, "".&html_escape($q->{'from'}).""); - push(@cols, "".&html_escape($q->{'to'}).""); - push(@cols, "$size"); - push(@cols, "".&html_escape($q->{'status'}).""); + push(@cols, $q->{'date'}); + push(@cols, &html_escape($q->{'from'})); + push(@cols, &html_escape($q->{'to'})); + push(@cols, $size); + push(@cols, $text{'mailq_'.$q->{'dir'}} || $q->{'dir'}); + push(@cols, &html_escape($q->{'status'})); push(@table, \@cols); } @@ -1883,7 +1893,8 @@ print &ui_form_columns_table("delete_queues.cgi", undef, undef, [ "", $text{'mailq_id'}, $text{'mailq_date'}, $text{'mailq_from'}, - $text{'mailq_to'}, $text{'mailq_size'}, $text{'mailq_status'} ], + $text{'mailq_to'}, $text{'mailq_size'}, $text{'mailq_dir'}, + $text{'mailq_status'} ], 100, \@table); } diff --git a/postfix/view_mailq.cgi b/postfix/view_mailq.cgi index 5b2644e9e..ed6b9ced7 100755 --- a/postfix/view_mailq.cgi +++ b/postfix/view_mailq.cgi @@ -76,10 +76,9 @@ if ($mail->{'last_retry'}) { print &ui_table_row($text{'mail_qlast'}, &make_date($mail->{'last_retry'})); } -if ($mail->{'mailq_dir'}) { +if ($mail->{'dir'}) { print &ui_table_row($text{'mail_qdir'}, - $text{'mail_qdir_'.$mail->{'mailq_dir'}} || - $mail->{'mailq_dir'}); + $text{'mailq_'.$mail->{'dir'}} || $mail->{'dir'}); } print &ui_table_end();