Le 05/05/2012 05:47, /dev/rob0 a écrit :
> On Fri, May 04, 2012 at 10:03:35PM -0400, Wietse Venema wrote:
>> Vincent Lefevre:
>>> I've received a mail having:
>>>
>>> From:
>>> =?GB2312?B?tfXBoyy2/rrP0ru19cGjLMj9us/Su7X1waMsy8S6z9K7tfXBoyy3/srOtfXB?=
>>>
>>> I wanted to reject such mail with
>>>
>>> /^.=\?GB2312\?B\?/ REJECT GB2312 in headers
>
> The OP showed that on two lines, but if it is, there would be leading
> whitespace. You want to match a whole logical header, not only a
> continued line. The expression should be:
>
> /^From:.=\?GB2312\?B\?/ REJECT GB2312 in headers
>
> Or, remove the anchor:
>
> /=\?GB2312\?B\?/ REJECT GB2312 in headers
>
>>> in header_checks.pcre, but this didn't work. I don't understand
>>> because
>>>
>>> postmap -q - pcre:/etc/postfix/header_checks.pcre < the_message
>>>
>>> says that the rule applies on this line.
>>
>> Try:
>>
>> postmap -h -q ....
>>
>> This way you enforce that it looks at headers only.
>
> One thing the header_checks(5) manual is not clear about is how to
> match the line end and leading whitespace. Is it matched by a single
> space in the expression,
No: with the following header:
Received: from localhost (localhost [127.0.0.1])
by russian-caravan.cloud9.net (Postfix) with ESMTP
$ cat test.pcre
/^Received:.*\) by/ WARN match single space
/^Received:.*\) by/ WARN match two spaces
/^Received:.*\)\s+by/ WARN match \s+
$ postmap -h -q - pcre:test.pcre < test.hdr
.... WARN match \s+
> or would we have to replace spaces with
> something like this: "[[:blank:]]+" ?
with pcre, you can use \s+
/Received:\s*from\s+\S+\s+\(\S+\s+\[\S+\]\)\s+by\+\S+/
that looks a bit cryptic, doesn't it? :)