まんぷく

Eximのlocal_scan動的読込み機能 その1

Eximはウイルススキャンやスパム判定ソフトと組合せられる

 Eximはサードパーティー製のソフトウェア(ClamAVや、SpamAssassinなど)を組み合わせることで、メール受信時にウイルス検出やスパム判定を行う事が出来ますが、これに加えてユーザー独自のコンテンツスキャン機能を追加する事が可能です。

Eximに独自メールスキャン機能を追加出来る。

 先日弊社サーバーにSpamAssassinを導入する際に読んだEximのドキュメンに気になるページを見つけました。

これは独自のコンテンツスキャン機能をEximに追加するというもので、読み進めてみるとなんとC言語で実装しろと書いてありました。プログラマー的に「ほんまかいな、これってなんでも出来るって事やん」とちょっとワクワクしました。

説明によると機能追加には必要なコードを書いてビルドし直すとの事。Debianの充実したパッケージ群のお陰で最近はすっかりご無沙汰のコンパイル作業が必要なので、これにもちょっとグッと来ました(笑)。

ソースコードをおとりよせ

 そんな訳でさっそくソースコードをおとりよせです。

最近ちまたで流行っているおとりよせ王子 飯田好実くんはウェブでポチるわけですが、Debianの場合はコマンド一発で瞬時にお取り寄せが完了します。そういや彼もIT系の人でした。

apt-get source exim4-daemon-heavy

入手が完了したのでまずはlocal_scan.cを探してみます。

~$ find . -name local_scan.c
./src/local_scan.c
./.pc/50_localscan_dlopen.dpatch/src/local_scan.c

local_scan.cにはどうやら変更(パッチ)が加えられているようですが、とりあえずはsrc/local_scan.cを読んでみるとソースの最初のほうに以下のようなコードがいきなり追加されていました。

#ifdef DLOPEN_LOCAL_SCAN
#include <dlfcn.h>
static int (*local_scan_fn)(int fd, uschar **return_text) = NULL;
static int load_local_scan_library(void);
#endif

もう一方のlocal_scan.cと見比べると一目瞭然で、どうやら動的ライブラリの読込に対応しているようです。あとでパッケージの説明の説明を読み直したら「dlopenパッチを含んでいます」と書かれていました。普通そこまで詳しく読まないしこちらのパッケージ説明にはdlopenの記述が無かったです。heavyは全部入りだからって認識なのかもしれません。

exim4-daemon-lightパッケージ詳細

Exim (v4) はメール配送エージェントです。本パッケージには、基本的な機能 しか有効にしていない exim4 デーモンが含まれます。Debian により供給されている 標準的な設定ではうまく働きますし、TLS 暗号化のサポートや、local_scan 機能の動的読み込みを可能とする dlopen パッチを含んでいます。

そんなこんなでDebianパッケージでEximをインストールしていれば、わざわざEximそのものをビルドし直す必要は無く、後から独自スキャン機能だけを追加出来るという結論を得ました。

ほっとしたところで続きは次回にしたいと思います。

Categories
tech

Tags
Exim4 / Debian