# New Ticket Created by  Hanno Hecker 
# Please include the string:  [perl #37720]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=37720 >


Hi,

this patch enables the configurable flags for the postfix-queue plugin.
By default no flags are set (old behaviour). Known flags for cleanup are
FLAG_FILTER, FLAG_BCC_OK and FLAG_MAP_OK, see POD for details.

        Hanno
--- plugins/queue/postfix-queue.orig    2005-07-06 16:24:51.000000000 +0200
+++ plugins/queue/postfix-queue 2005-10-30 09:00:57.000000000 +0100
@@ -8,21 +8,67 @@
 
 =head1 CONFIG
 
-It takes one optional parameter, the location of the cleanup socket.
+The first optional parameter is the location of the cleanup socket. If it does
+not start with a ``/'', it is treated as a flag for cleanup (see below).
+If set, the environment variable POSTFIXQUEUE overrides this setting.
+
+All other parameters are flags for cleanup, no flags are enabled by default.
+Known flags are:
+
+=over 3
+
+=item FLAG_FILTER
+
+Set the CLEANUP_FLAG_FILTER for cleanup. This enables the use of 
+I<header_filter>, I<body_filter> or I<content_filter> in postfix' main.cf.
+
+=item FLAG_BCC_OK
+
+Setting this flag enables (for example) the I<recipient_bcc_maps> parameter
+
+=item FLAG_MAP_OK
+
+This flag enables the use of other recipient mappings (e.g. 
+I<virtual_alias_maps>) in postfix' cleanup.
+
+=back
 
-If set the environment variable POSTFIXQUEUE overrides this setting.
 
 =cut
 
 use Qpsmtpd::Postfix;
+#
+# postfix' cleanup flags:
+use constant CLEANUP_FLAG_FILTER => (1<<1); # /* Enable content filter */
+use constant CLEANUP_FLAG_BCC_OK => (1<<4); # /* Ok to add auto-BCC addresses 
*/
+use constant CLEANUP_FLAG_MAP_OK => (1<<5); # /* Ok to map addresses */
+
 
 sub register {
   my ($self, $qp, @args) = @_;
   $self->register_hook("queue", "queue_handler");
-
+  
+  $self->{_queue_flags} = 0;
   if (@args > 0) {
-    $self->{_queue_socket} = $args[0];
-    $self->log(LOGWARN, "WARNING: Ignoring additional arguments.") if (@args > 
1);
+    if ($args[0] =~ m#^/#) {
+      $self->{_queue_socket} = shift @args;
+    } else {
+      $self->{_queue_socket} = "/var/spool/postfix/public/cleanup";
+    }
+    foreach (@args) {
+      if ($_ eq 'FLAG_FILTER') {
+        $self->{_queue_flags} |= CLEANUP_FLAG_FILTER;
+      } 
+      elsif ($_ eq 'FLAG_BCC_OK') {
+        $self->{_queue_flags} |= CLEANUP_FLAG_BCC_OK;
+      }
+      elsif ($_ eq 'FLAG_MAP_OK') {
+        $self->{_queue_flags} |= CLEANUP_FLAG_MAP_OK;
+      }
+      else {
+        $self->log(LOGWARN, "Ignoring unkown cleanup flag $_");
+      }
+    }
   } else {
     $self->{_queue_socket} = "/var/spool/postfix/public/cleanup";
   }
@@ -33,7 +79,8 @@
 
 sub queue_handler {
   my ($self, $transaction) = @_;
-
+  $transaction->notes('postfix-queue-flags', $self->{_queue_flags});
+  # $self->log(LOGDEBUG, 
"queue-flags=".$transaction->notes('postfix-queue-flags'));
   my ($status, $qid, $reason) = Qpsmtpd::Postfix->inject_mail($transaction);
   $status and return(DECLINED, "Unable to queue message ($status, $reason)");
 
--- lib/Qpsmtpd/Postfix.pm.orig 2005-07-06 16:24:53.000000000 +0200
+++ lib/Qpsmtpd/Postfix.pm      2005-10-30 08:36:23.000000000 +0100
@@ -162,7 +162,7 @@
   my %at = $strm->get_attr;
   my $qid = $at{queue_id};
   print STDERR "qid=$qid\n";
-  $strm->print_attr('flags' => '0000');
+  $strm->print_attr('flags' => $transaction->notes('postfix-queue-flags'));
   $strm->print_rec_time();
   $strm->print_rec('REC_TYPE_FROM', $transaction->sender->address|| "");
   for (map { $_->address } $transaction->recipients) {

Reply via email to