[svn:qpsmtpd] r600 - in branches/0.3x: lib/Qpsmtpd plugins/queue
[email protected] 11 Jan 2006 16:48:08 -0000
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> 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