|
||
|
rsyslogモジュールommailの時刻ズレに対処するrsyslogで、特定の文字列を含むsyslogが流れてきたらメールを送信するモジュール「ommail」ですが、一点気になる点があります。 通常使ってるとあまり気づかないのですが、「標準時でメールを送信する」という問題です。 ommailはメール送信時に、明示的に「UT(ユニバーサルタイム)」を指定して送信します。 そのためDateヘッダを解釈するメーラを使用すると、メールの送信日時が9時間ズレて表示されます。 (つまり18時に発生したメールは送信時間9時と表示されます) なお送信日時を「最初のReceived」を参照しているOutlookなどのメーラや、そもそも送信時間が表示されない携帯メールではこれらの問題は無視されます。 ommailが送ってくるメールDate行 Date: Sun, 9 Sep 2011 07:30:45 UT あるいは Date: Sun, 9 Sep 2011 07:30:45 +0000 期待したいメールDate行 Date: Sun, 9 Sep 2011 16:30:45 +0900 なにが困るのかというと、メールをソートしたときに時系列順に並ばないことです。 ソースコードを修正する この部分はommailのソースコード内で静的に記述されているため、ソースコードを修正する以外対処はありません。 ソースコード修正としては一番簡単な部類に入るでしょう。 インストールする前なら、あらかじめ修正しておけば意識せず済みます。 インストールした後なら、コンパイル後、生成されたモジュールを手作業で入れ替えるのが簡単でしょう。 まずはソースコードを眺めます。 ommailはpluginディレクトリの下にあります。 #vi (ソースDir)/plugins/ommail/ommail.c Date行がメール送信、つまりSMTPのシーケンスで行われていることは容易に想像できるので、HELOを検索してみましょう。 すると、「sendSMTP」という関数の中にHELO文字を見つけられました。 ここがメール送信の実体であることは間違いありません。 さらに見ていくと、いかにもメールの送信時間を設定してそうなmkSMTPTimestampという関数があります。 (ちなみに画面上部に「DATA」という文字が見えますが、「Date」と勘違いしてはいけません。DATAは本文部分です) で呼び出されているmkSMTPTimestampという関数を検索してみると、ありました。 Date行とさらに問題となる「UT」の文字が明示的に記述されています。 ここをJSTに書き換えてもいいのですが、そもそもDate行など組み込まなくともメール送信に実害はありません。 mkSMTPTimestamp関数の呼び出しを、丸ごとコメントアウトします。 始まりを「/*」で、終わりを「*/」で括ります。 未インストール時なら、後は普通にインストールします。 →rsyslogをインストールする すでにインストール済みの場合は、モジュールのみ入れ替えます。 コンパイル済み情報がある場合があるので「make clean」を実施してからmakeします。 #make clean #make コンパイルされたファイルはommailディレクトリの「.(ドット)libs」の下に生成されます。 #service rsyslog stop #cd (ソースコードdir)/plugin/ommail/.libs/ #cp ommail.so /usr/local/lib/rsyslog/ #cp ommail.la /usr/local/lib/rsyslog/ #service rsyslog start これでメールの送信時間が日本時間に(というか送信メールサーバのローカル時間に)なります。 というかなぜUTを指定してるのか不明ですが、おそらく作者なりのメールマナーのつもりだったのでしょう。 |
|