2006年11月08日

gtech-simscanを改良

SPAM対策としてgtech-simscanを使用していたのですが、DSPAMの異常終了を検出できず、空のメールが送られる(メール本文が行方不明になる)現象が発生したので使うのを中止していました。

DSPAMの異常終了はDSPAMのデータベースが壊れたことが原因です。データベースが壊れた原因はわかりませんが、おそらくプログラムのバグでしょう。ストレージエンジンにhash_drvを使ってはダメなんだろうなぁ。。。どこのサイトをみてもhash_drvを使わずmysql_drvを使っているのはこのためでしょう。

プログラムのバグにガッカリして暫く放置していたのですが、最近SPAMが増えてきたので、gtech-simscanのソースコード(Cで書かれています)を解析してみました。解析の結果、

vfork() → execve() → waitpid()

という手順でDSPAMを呼び出しているのですが、waitpid()のあとにstatusのチェックが甘いのが原因のようです。WIFEXITED(status)が真のとき、WEXITSTATUS(status)で終了コードを拾うようにコードを追加したら上手くいきました。

DSPAM以外のSpamAssassin等の外部プログラムを呼び出す手順も同様の処理なので、手を入れないと異常終了したときに泣きを見ますね、たぶん。。。
エラー処理が甘いプログラムは結構多いかもしれません。
Posted by admin at 10:52 午後 | from category: Computer |
コメント
コメントはまだありません