develooper Front page | perl.cvs.qpsmtpd | Postings from January 2006

[svn:qpsmtpd] r600 - in branches/0.3x: lib/Qpsmtpd plugins/queue

From:
jpeacock
Date:
January 11, 2006 08:48
Subject:
[svn:qpsmtpd] r600 - in branches/0.3x: lib/Qpsmtpd plugins/queue
Message ID:
20060111164808.23103.qmail@x1.develooper.com
Author: jpeacock
Date: Wed Jan 11 08:48:08 2006
New Revision: 600

Modified:
   branches/0.3x/lib/Qpsmtpd/Postfix.pm
   branches/0.3x/plugins/queue/postfix-queue
Log:
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.

Patch by: Hanno Hecker <hah@uu-x.de>

Modified: branches/0.3x/lib/Qpsmtpd/Postfix.pm
==============================================================================
--- branches/0.3x/lib/Qpsmtpd/Postfix.pm	(original)
+++ branches/0.3x/lib/Qpsmtpd/Postfix.pm	Wed Jan 11 08:48:08 2006
@@ -162,7 +162,7 @@ sub inject_mail {
   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) {

Modified: branches/0.3x/plugins/queue/postfix-queue
==============================================================================
--- branches/0.3x/plugins/queue/postfix-queue	(original)
+++ branches/0.3x/plugins/queue/postfix-queue	Wed Jan 11 08:48:08 2006
@@ -1,3 +1,4 @@
+
 =head1 NAME
 
 postfix-queue
@@ -8,37 +9,88 @@ This plugin passes mails on to the postf
 
 =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
 
-If set the environment variable POSTFIXQUEUE overrides this setting.
+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
 
 =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) = @_;
+    my ($self, $qp, @args) = @_;
 
-  if (@args > 0) {
-    $self->{_queue_socket} = $args[0];
-    $self->log(LOGWARN, "WARNING: Ignoring additional arguments.") if (@args > 1);
-  } else {
-    $self->{_queue_socket} = "/var/spool/postfix/public/cleanup";
-  }
+    $self->{_queue_flags} = 0;
+    if (@args > 0) {
+        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";
+    }
 
-  $self->{_queue_socket} = $ENV{POSTFIXQUEUE} if $ENV{POSTFIXQUEUE};
+    $self->{_queue_socket} = $ENV{POSTFIXQUEUE} if $ENV{POSTFIXQUEUE};
 
 }
 
 sub hook_queue {
-  my ($self, $transaction) = @_;
-
-  my ($status, $qid, $reason) = Qpsmtpd::Postfix->inject_mail($transaction);
-  $status and return(DECLINED, "Unable to queue message ($status, $reason)");
+    my ($self, $transaction) = @_;
+    $transaction->notes('postfix-queue-flags', $self->{_queue_flags});
 
-  my $msg_id = $transaction->header->get('Message-Id') || '';
-  $msg_id =~ s/[\r\n].*//s;  # don't allow newlines in the Message-Id here
-  return (OK, "Queued! $msg_id (Queue-Id: $qid)");
+# $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)");
+
+    my $msg_id = $transaction->header->get('Message-Id') || '';
+    $msg_id =~ s/[\r\n].*//s;    # don't allow newlines in the Message-Id here
+    return (OK, "Queued! $msg_id (Queue-Id: $qid)");
 }
 
 #vim: sw=2 ts=8



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About