This will take a bit of explaining, so please bear with me.

I'm working with an up-line provider on implementing SpamAssassin and
MIMEDefang, and having problems with rewriting subject lines to include a SA score.


In this particular installation, we have MIMEDefang running with a lot
of customized routines that do extensive header rewriting.  The box in
question is running RH 7.3, sendmail 8.12.8-1, mimedefang-2.25-1 and
spamassassin-2.64-1, all of which have been installed from RPM
distributions.

What's happening is if we add the following to sub filter_end:

        action_change_header("Subject", "[SPAM: $hits] $Subject");

then running:

        perl -cw mimedefang-filter

we get the following response:

Global symbol "$Subject" requires explicit package name at
mimedefang-filter line 549. mimedefang-filter had compilation errors.

For this, line 549 is a comment line, where the previous line of active code is:


           if (-s "./INPUTMSG" < 100*1024) {

that is, the test to ignore a message if it's larger than 100K. If we comment out the action_change_header line (as quoted above), the problem goes away. In the same way, excluding $Subject from that line also makes the problem go away.

If I copy this mimedefang-filter file over to a different box (this one running Fedora Core-2, sendmail 8.13.1, mimedefang 2.44 and spamassassin 2.64, all built from tarball), we get a different, but similar error:

Global symbol "$Subject" requires explicit package name at
/tmp/mimedefang-filter line 573, <DATA> line 225. /tmp/mimedefang-filter
had compilation errors.

In this, line 225 is in the set of customized routines, and line 573 is the active 'action_change_header' line. For reference, I've quoted the entirety of sub filter_end below (excluding comment lines). fen_post_filter is a call to one of our customized routines.


(The Fedora box has a different mimedefang-filter running, without all the customized header rewriting, and in the mimedefang-filter it runs, it has no problem with rewriting the subject line, using identical syntax with action_change_header.)

In this situation, why are we not able to get to the contents of $Subject? How do we work around this problem?

Thanks in advance.

Smith


sub filter_end ($) {
    my($entity) = @_;

    # No sense doing any extra work
    return if message_rejected();

    # Spam checks if SpamAssassin is installed
    if ($Features{"SpamAssassin"}) {
        if (-s "./INPUTMSG" < 100*1024) {
            my($hits, $req, $names, $report) = spam_assassin_check();
            if ($hits >= $req) {
                md_log('spam', $hits, $RelayAddr);
                my($score);
                if ($hits < 20) {
                    $score = "*" x int($hits);
                } else {
                    $score = "*" x 20;
                }
                action_change_header("X-Spam-Score", "$hits ($score) $names");

                # If you find the SA report useful, add it, I guess...
                action_add_part($entity, "text/plain", "-suggest",
                                "$report\n",
                                "SpamAssassinReport.txt", "inline");
#####           action_change_header("Subject", "[SPAM: $hits] $Subject");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The problem line of code.

                action_add_header("X-Spam-Status", "Yes");
            } else {
                # Delete any existing X-Spam-Score header?
                action_delete_header("X-Spam-Score");
                action_add_header("X-Spam-Status", "No");
            }
        }
    }
    fen_post_filter($entity);
}

---

_______________________________________________
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