]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/Postfix.pm
fix bug #2035 cluster sync issues with ipv6
[pmg-api.git] / PMG / Postfix.pm
index 35267147784bea4a37e3e62b88e1e53efaf98fe7..1a86e90489c842d9c4af8cc220d016143ee1e01d 100644 (file)
@@ -6,6 +6,10 @@ use Data::Dumper;
 use File::Find;
 use JSON;
 
+use PVE::Tools;
+
+use PMG::Utils;
+
 my $spooldir = "/var/spool/postfix";
 
 my $postfix_rec_get = sub {
@@ -55,8 +59,6 @@ my $postfix_qenv = sub {
        elsif ($r eq "E") { last; }
     }
 
-    close($fh);
-
     return $res;
 };
 
@@ -94,7 +96,6 @@ sub qshape {
 
     my $line = <$fh>;
     if (!$line || !($line =~ m/^\s+T\s+5\s+10\s+20\s+40\s+80\s+160\s+320\s+640\s+1280\s+1280\+$/)) {
-       close (CMD);
        die "ERROR: unable to parse qshape output: - $line";
     }
 
@@ -103,60 +104,117 @@ sub qshape {
     while (($count++ < 10000) && (defined($line = <$fh>))) {
        if ($line =~ m/^\s+(\S+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+)$/) {
            my @d = split(/\s+/, $1);
-           push @$res, { 
+           push @$res, {
                domain => $d[0],
                total => $d[1],
-               '5s' => $d[2],
-               '10s' => $d[3],
-               '20s' => $d[4],
-               '40s' => $d[5],
-               '80s' => $d[6],
-               '160s' => $d[7],
-               '320s' => $d[8],
-               '640s' => $d[9],
-               '1280s' => $d[10],
-               '1280s+' => $d[11],
+               '5m' => $d[2],
+               '10m' => $d[3],
+               '20m' => $d[4],
+               '40m' => $d[5],
+               '80m' => $d[6],
+               '160m' => $d[7],
+               '320m' => $d[8],
+               '640m' => $d[9],
+               '1280m' => $d[10],
+               '1280m+' => $d[11],
            };
        }
     }
 
-    close($fh);
-
     return $res;
 }
 
 sub mailq {
-    my ($domain, $limit) = @_;
-
-    $domain = lc($domain);
+    my ($queue, $filter, $start, $limit) = @_;
 
     open(my $fh, '-|', '/usr/sbin/postqueue', '-j') || die "ERROR: unable to run postqueue - $!\n";
 
     my $count = 0;
+
+    $start = 0 if !$start;
+    $limit = 50 if !$limit;
+
     my $res = [];
     my $line;
     while (defined($line = <$fh>)) {
        my $rec = decode_json($line);
        my $recipients = $rec->{recipients};
+       next if $rec->{queue_name} ne $queue;
 
        foreach my $entry (@$recipients) {
-           my $address = lc($entry->{address});
-           if ($address =~ m/\@$domain$/) {
+           if (!$filter || $entry->{address} =~ m/$filter/i ||
+               $rec->{sender} =~ m/$filter/i) {
+               next if $count++ < $start;
+               next if $limit-- <= 0;
+
                my $data = {};
                foreach my $k (qw(queue_name queue_id arrival_time message_size sender)) {
                    $data->{$k} = $rec->{$k};
                }
-               $data->{receiver} = $address;
+               $data->{receiver} = $entry->{address};
                $data->{reason} = $entry->{delay_reason};
                push @$res, $data;
-               last if $limit && (++$count >= $limit);
            }
        }
     }
 
-    close (CMD);
+    return ($count, $res);
+}
+
+sub postcat {
+    my ($queue_id, $header, $body) = @_;
+
+    die "no option specified (select header or body or both)"
+       if !($header || $body);
+
+    my @opts = ();
+
+    push @opts, '-h' if $header;
+    push @opts, '-b' if $body;
+
+    push @opts, '-q', $queue_id;
+
+    open(my $fh, '-|', '/usr/sbin/postcat', @opts) || die "ERROR: unable to run postcat - $!\n";
+
+    my $res = '';
+    while (defined(my $line = <$fh>)) {
+       $res .= $line;
+    }
 
     return $res;
 }
 
+# flush all queuespostconf -d|grep enable_long_queue_ids
+sub flush_queues {
+    PVE::Tools::run_command(['/usr/sbin/postqueue', '-f']);
+}
+
+# flush a single mail
+sub flush_queued_mail {
+    my ($queue_id) = @_;
+
+    PVE::Tools::run_command(['/usr/sbin/postqueue', '-i', $queue_id]);
+}
+
+sub delete_queued_mail {
+    my ($queue, $queue_id) = @_;
+
+    PVE::Tools::run_command(['/usr/sbin/postsuper', '-d', $queue_id, $queue]);
+}
+
+sub delete_queue {
+    my ($queue) = @_;
+
+    my $cmd = ['/usr/sbin/postsuper', '-d', 'ALL'];
+    push @$cmd, $queue if defined($queue);
+
+    PVE::Tools::run_command($cmd);
+}
+
+sub discard_verify_cache {
+    unlink "/var/lib/postfix/verify_cache.db";
+
+    PMG::Utils::service_cmd('postfix', 'reload');
+}
+
 1;