2006年4月17日

[SpamAssassin-JP 200] Re:レシピのマッチングについて

** SpamAssassin メーリングリスト **
** 注意:このメールへの返信は SpamAssassin-jp へ行きます **
久保です。

# ちょっとだけソース(SA 3.1.0)を追いかけてみました。追いかけかたを間違え
# ていなければいいのですが:-)

> X-Envelope-Information: match NS blacklist livedoor

> X-Envelope-Information: match S25R
>
> というような行がヘッダに入っています。

SAはこのようなケースも考慮しているようですね。そしてReceivedは特別に処理
しているみたいです(Receivedの処理内容は詳しく見ていませんが)。

Message/node.pmでheader関数が定義してあり、これに関して次のようなコメン
トがあります。

ie: If 'Subject' is specified as the header, and there are 2 Subject
headers in a message, the last/bottom one in the message is returned in
scalar context or both are returned in array context.

同様のコメントはMessage.pmのget_header関数のところにも書いてあります。


>  それを「match S25R」だけあれば4点、「match NS blacklist」だけあれば6点、
> どちらもあれば10点、というようなルールにしたつもりだったのですが、2行有
> る場合は上の「match NS blacklist」の条件だけに掛かっている結果になってし
> まうのです。

最初のヘッダ値だけが得られてしまう、というわけなんですね。上のコメントだ
とスカラーコンテキストでは「最後の値」になりそうなんですが....。

ともあれ、実際にヘッダをテストする箇所(PerMsgStatus.pm)を追いかけてみると、

do_head_testが正規表現のヘッダテストを処理する関数(l.1602)
この関数中でヘッダ値を取り出すためにget関数を呼び出し、(l.1662)
get関数は_getを呼び出し、(l.1556)
_get関数はget_header関数を呼び出す(l.1498)

という流れになっています。

「予約語」的なヘッダ以外の処理はPerMsgStatus.pmの1498行目付近に書いて
あって、

$result = join('', $self->{msg}->get_header($request, $getraw));

という行が値の取り出しに関係しているように思えます。

>> SA をデバッグモードで稼働させて、実行内容をご覧になってみてはいかがでしょう。
>
>  了解です。試してみます。

上の行の後にdbg関数を追加して、取り出した値を追いかけてみてはいかがで
しょうか。

--
----------------------------------------------------------------------
久保 元治 (株)サードウェア
Motoharu Kubo 274-0815 千葉県船橋市西習志野3-39-8
mkubo@xxxxx URL: http://www.3ware.co.jp/
Phone: 047-496-3341 Fax: 047-496-3370
携帯: 090-6171-5545
★弊社からのメールはZ-Linuxメールフィルタで全数検査しています★
★ ブログを始めました http://blogs.itmedia.co.jp/ossway/
--
SpamAssassin メーリングリスト
http://mm.apache.jp/mailman/listinfo/spamassassin-jp

投稿者 xml-rpc : 2006年4月17日 15:27
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/41299
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。