bernholdtde@ornl.gov wrote:
Here's the result: In applying header_filter_rules, it looks like the entire set of headers is being treated as a single multiline string.
That is correct.
For reasons I don't entirely understand (remember I'm not a python expert), "^" and "$" are not matching the beginning and end of individual lines of a multiline string, even though I interpreted http://www.python.org/doc/current/lib/matching-searching.html to say that they should, and a colleague who's very familiar with Python also thought they should.
It works for me. I just set a header_filter_rules regexp on a test list to "^subject:.*hello.*$" with a reject action, and my test post with
Subject: test Hello in subject
was rejected with "Message rejected by filter rule match". In case you're wondering, the Subject: was the 15th of 21 headers in the message delivered to Mailman.
I then tested the regexp "^subject:\s+yes\s*$" with a post with
Subject: yes
and it too was caught.
If I don't have the line beginning/ending constraints in the regex, there is a risk (albeit small) that a subject header could match. So I ended up with "\nx-spam-flag:\s+yes\s*\n".
That should be equivalent to "^x-spam-flag:\s+yes\s*$" in header_filter_rules. Does the actual search in your SpamDetect.py say
if re.search(pattern, headers, re.IGNORECASE|re.MULTILINE):
By the way, MM FAQ entry 3.32 and 3.51 are inconsistent about "^" and "$", and based on my experience 3.51 is wrong.
I have revised 3.32 which I think was the incorrect one, but we still have to resolve why it works for me and not for you.
-- Mark Sapiro mark@msapiro.net The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan