合資会社 満福

アプリ

会社概要

連絡先

合資会社 満福ブログ

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

2013-09-07 19:45:00 +0900 - 土田岳雄

前回はEximには独自にコンテンツスキャンを拡張する仕組みがあること、Debian版Eximはソースコードからビルドしなくても利用できることを説明しました。今回は実際にどうやって作るのかを説明したいと思います。

Exim本体のリビルドは不要ですが、機能拡張部分のC言語で書かなければならない事は変わりありません。オリジナルで有ればlocal_scanという名前のC言語関数を書いてリビルドするだけですが、Exim版ではもう一手間かけてダイナミックリンクライブラリにする必要があります。

ただしlocal_scan関数だけでは動作しません。src/local_scan.cを読めば分かるのですがABIの互換性チェックのための関数が必要です。

local_scan版Hello Worldの作成(hello-exim.c)

さっそくソースコード見て下さい。二つ関数が追加されていますが、これが先ほど出てきた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言語処理なので、書き方によってはメールが壊れて、全てスプール行きなどの事態を引き起こします。くれぐれもテスト無しで実動中のサーバーに入れるような勇敢(無謀)な行為はしないで下さい。