Eximのlocal_scan動的読込み機能 その2
前回はEximには独自にコンテンツスキャンを拡張する仕組みがあること、Debian版Eximはソースコードからビルドしなくても利用できることを説明しました。今回は実際にどうやって作るのかを説明したいと思います。
Exim本体のリビルドは不要ですが、機能拡張部分のC言語で書かなければならない事は変わりありません。オリジナルで有ればlocal_scanという名前のC言語関数を書いてリビルドするだけですが、Exim版ではもう一手間かけてダイナミックリンクライブラリにする必要があります。
ただしlocal_scan関数だけでは動作しません。src/local_scan.c
を読めば分かるのですがABIの互換性チェックのための関数が必要です。
local_scan版Hello Worldの作成(hello-exim.c)
さっそくソースコード見て下さい。二つ関数が追加されていますが、これが先ほど出てきたABIに関連する関数で、それぞれメジャーとマイナーのバージョン番号を返すだけの簡単な関数です。
コンパイルするために必要なパッケージを入れます。
コンパイルして配置します。
Eximに設定を追加して再起動します。
届いたメールにヘッダーX-Hello-Exim
が追加されていればオッケーです。ここまで出来たら後はデータベースでもなんでも、お好きな機能を実装して下さい。ただし実行時間が長すぎるとタイムアウトしますのでご注意を。
注意!!気楽に導入するとエライことになります
この記事の対象者に改めて書く必要もないとは思いますが、まるっきりプリミティブなC言語処理なので、書き方によってはメールが壊れて、全てスプール行きなどの事態を引き起こします。くれぐれもテスト無しで実動中のサーバーに入れるような勇敢(無謀)な行為はしないで下さい。