On Wed, 28 Jan 2004, Fox, Randy wrote:

> > does anyone have a quick way to say
> > if the recipient is [EMAIL PROTECTED] exit from the
> > filter completely and deliver as-is?
>
> How about adding and activating filter_recipient?  Then put something
> like this in the sub-routine:
>
> sub filter_recipient {
>         my($recip, $sender, $ip, $host, $first, $helo) = @_;
>         $recip =~ tr/A-Z/a-z/;
>         if ($recip =~ /[EMAIL PROTECTED]/) {
>             return ('ACCEPT_AND_NO_MORE_FILTERING','ok');
>         }
> }

Hmm, this snippet is from stream_by_recipient:

    foreach $recip (@Recipients) {
        resend_message_one_recipient($recip);
    }

You have _one_ recipient that should go unfiltered, but the mail has
probably more than one recipient.

The idea I have now is that the mail is dealt with normally, if there is
just one recipient or at least one non-exempted recipient is specified,
and the message is resend to all exempted recipients individually.

How about in filter_begin:

if(scalar(@Recipients) > 1) { # May be honeypot and regular users are
                        # intermixed

        # Filter for exempted recipients
        foreach my $r (@Recipients) {
                if($r =~ /(^|\<)[EMAIL PROTECTED]($|\>)/i) {
                        # honeypot found

                        # Resend -> Next time the filter gets this mail
                        # there is just one recipient, hence, this
                        # check is bypassed, and the mail is processed
                        resend_message_one_recipient($r);

                        delete_recipient($r);
                }
        }

## Warning:
# If you have more than one recipients to exempt, you have to deal with
# the probability that all recipients are deleted from the current (the
# original, actually) message, because all of them are exempted.

## Warning #2:
# @Recipients does still include all exempted recipients, because
# delete_recipient() does not update the array!

        $exemptedUser = 0;
} elsif($Recipient[0]  =~ /(^|\<)[EMAIL PROTECTED]($|\>)/i) {
        # the single recipient is the special user to be exempted from
        # scanning

        # Set a global variable so all filter_*() functions bypass filtering
        # by immediately calling action_accept();
        $exemptedUser = 1;
        return action_accept();
} else {
        $exemptedUser = 0;
}

Then in all other filter_* functions there is a:


        return action_accept() if $exemptedUser;

right behind the usual

        return if message_rejected();

Or do evaluate $exemptedUser whereever you need.

Bye,

-- 
Steffen Kaiser
_______________________________________________
Visit http://www.mimedefang.org and http://www.canit.ca
MIMEDefang mailing list
[EMAIL PROTECTED]
http://lists.roaringpenguin.com/mailman/listinfo/mimedefang

Reply via email to