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