アカウント名:
パスワード:
qmail-smtpdってSMTPセッションごとにtcpserverなりinetd(げげ)から起動されるから、明示的な再起動はいらないんじゃないかと思うんですが。今生きているSMTPセッションをすぐに落として、という意味なのかしら。
# いずれにせよ、databytesを設定しないでqmailを運用するなんて俺自身は考えられないけど。
本当だ。オリジナルのアドバイザリ [guninski.com]もdatabytesの記述が消えて、
Workaround: Not tested, but setting quota on the receiving email may help.
となっています。
ちょっとqmail-smtpd.cを眺めてみました。
databytesが設定されていない状況であれば、qmailqにそれなりのquotaをかけてあれば、qmail-smtpdがSIGSEGVを食らう前に(qmail-queueがキューに書き出せなくなって落ちるため)SIGPIPEを食らって落ちてくれると思いますが、databytesを設定してあると無駄ということになりそうです。ちなみに、softlimitをかけてもこの件の解決にはなりません。件のコードはポインタをインクリメントしてるだけで、アロケートはしていませんので。
結局、blast()内でposがオーバーフローしないようにチェックしてやる以外に方法はないと思いました。
# そもそも、ヘッダフィールド長の上限(CRLF込みで1000bytes)をチェックしなくていいのかよとも思いますし。
ヘッダフィールド長の上限(CRLF込みで1000bytes)をチェックしなくていいのかよとも思いますし。
ヘッダに限らないや。RFC2822での1行の長さの制限でした。改めて読んでみると、受け入れちゃいけないわけじゃないみたいですね。
前者のパッチ相当の修正で試してみました。databytesを100MBに設定した環境ですが、a)、b)いずれのパターンも最後まで読み込んで「552 sorry, that message size exceeds my databytes limit (#5.3.4)」で弾いてくれますね。よさそうです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
再起動? (スコア:3, 参考になる)
qmail-smtpdってSMTPセッションごとにtcpserverなりinetd(げげ)から起動されるから、明示的な再起動はいらないんじゃないかと思うんですが。今生きているSMTPセッションをすぐに落として、という意味なのかしら。
# いずれにせよ、databytesを設定しないでqmailを運用するなんて俺自身は考えられないけど。
Re:再起動? (スコア:4, 参考になる)
Re:再起動? (スコア:2, 参考になる)
本当だ。オリジナルのアドバイザリ [guninski.com]もdatabytesの記述が消えて、
となっています。
Re:再起動? (スコア:2, 参考になる)
どのユーザにつけるのかわからないけど。
qmail-smtpd は受け取るだけで、ローカルユーザの権限のファイルになるのは、qmail-local が Maildir なり Mailbox に書き込む時だから。
Re:再起動? (スコア:2, 参考になる)
ちょっとqmail-smtpd.cを眺めてみました。
databytesが設定されていない状況であれば、qmailqにそれなりのquotaをかけてあれば、qmail-smtpdがSIGSEGVを食らう前に(qmail-queueがキューに書き出せなくなって落ちるため)SIGPIPEを食らって落ちてくれると思いますが、databytesを設定してあると無駄ということになりそうです。ちなみに、softlimitをかけてもこの件の解決にはなりません。件のコードはポインタをインクリメントしてるだけで、アロケートはしていませんので。
結局、blast()内でposがオーバーフローしないようにチェックしてやる以外に方法はないと思いました。
# そもそも、ヘッダフィールド長の上限(CRLF込みで1000bytes)をチェックしなくていいのかよとも思いますし。
Re:再起動? (スコア:1)
ヘッダに限らないや。RFC2822での1行の長さの制限でした。改めて読んでみると、受け入れちゃいけないわけじゃないみたいですね。
Re:再起動? (スコア:0)
それは、a) の方ですね。
int pos; を unsigned int pos; に変えるだけで良さげに思えます。
b) の方は分からないです。
smtpのヘッダを分離している部分で起こっているらしいんですが。
Re:再起動? (スコア:1, 参考になる)
データの量がdatabytesを超えた場合、エラーフラグを設定して
読み込みの作業を続ける。そしてデータを全て読み込み終わった
後でdatabytesを超えた旨のフラグが立っていたらクライアントに
エラーを通知するようになっている。だからdatabytesを設定しても
読み込み処理のバグは回避できない。
その他有用そうなもの:
qmail bug patch [securepoint.com]
未テストのパッチ(人柱の人は試して結果を報告だ)
Guninski may have been misled by gdb [securepoint.com]
バッファーオーバーフローが発生した様に見えるのはgdbの
問題であって今回の穴はただのSEGVかもしれないという説。
Re:再起動? (スコア:1)
前者のパッチ相当の修正で試してみました。databytesを100MBに設定した環境ですが、a)、b)いずれのパターンも最後まで読み込んで「552 sorry, that message size exceeds my databytes limit (#5.3.4)」で弾いてくれますね。よさそうです。
Re:再起動? (スコア:1)
>ただし対策はさほど難しくなく、/var/qmail/control/databytesに2G以下の数値を設定してこのプロセスを再起動すればよいそうです。
この部分は訂正してもらった方がいいような。