Apacheの開発者向けメーリングリストで昨日あたりから「そろそろ1.3.30リリースする?」ってな雰囲気になってますね。というわけでApache HTTP Serverバージョン1.3.30の変更点の簡単なまとめ。
概要
例によってクリティカルな問題の修正はほとんど無く、細かな問題点の修正や機能追加のためのアップデートと考えて差し支えないようです。一番大きな変更はライセンスがApache License Version 1.1からApache License Version 2.0に変更された点で、これが主な動機なんじゃないかなーとも思えます。新しいライセンスは「使う」人にとっては基本的に何ら変わりないと思いますが、「配る」や「売る」人は一応全文を読んで噛み砕いておくと大吉です。たぶん使い易くなってると思います。モジュールの開発者に影響する変更点として、クラッシュ時に診断処理を実行できるように関数ap_add_fatal_exception_hookが追加されます。このフックで自前の関数を登録しておけば
- SIGSEGV - Segmentation violation
- SIGBUS - Bus error
- SIGABRT or SIGABORT - Abort program
- SIGILL - Illegal instruction
mod_whatkilledusモジュールはクラッシュ直前に受け取ったURI・リクエストヘッダ・クライアントのIPアドレスなどを記録できるようなので、「どんなリクエストでApacheがクラッシュしたのか?」といった何気に面倒な調査に役立つはずです。リクエストを受けるたびにURIとリクエストヘッダを文字列として保存しておくだけ、という負荷も軽めのモジュールなので 戦うサーバ管理者は要チェックな機能です。
mod_backtraceモジュールはその名のとおりクラッシュ時にbacktraceの結果をログに出力してくれるモジュールですが、backtrace()やbacktrace_symbols_fd()をサポートするglibc 2.xやlibexecinfoをもつ環境(execinfo.hね)でしか使えないのがちょっと残念。
まだ取り込まれていない(取り込みたい?)パッチがいくつかあるようなのでその辺かクリアになってからですが、順調にいけば3月の第三週ぐらいにリリースしたいようです。
主な変更点
ライセンスの変更
Apache Software License, Version 1.1からVersion 2.0に変更。セキュリティ面での修正
アクセス制御を行うAllowおよびDenyディレクティブの処理を修正。allowおよびdenyディレクティブにサブネットマスクを指定せずIPアドレスのみを記述した際に、64ビット且つビッグエンディアンのプラットフォーム(UltraSPARC, PowerPC, MIPS等?)では指定した条件が期待通り働かない場合があったようです。エラーログを書き出す際にエスケープ処理を行います。もしこの処理が不要な場合はAP_UNSAFE_ERROR_LOG_UNESCAPEDフラグを立ててビルドします。
機能追加
クラッシュ時に任意の関数を実行できるように、関数ap_add_fatal_exception_hookを追加。またクラッシュ時の解析用にmod_whatkilledusとmod_backtraceモジュールを追加。mod_rewriteモジュールでREMOTE_PORT変数を使用できるように変更。
mod_mime_magicモジュールの設定上の構文エラーを検出できるようにした。
リクエストごとの詳細な情報を記録するためのmod_log_forensicモジュールを追加。CookieでユニークなIDを付与した上でリクエストヘッダなどを記録する。
その他
- mod_includeモジュール(SSIの条件式パーサの修正)
- mod_usertrackモジュール(CookieName未設定でCookieTracking Onするとクラッシュする問題。Cookie2ヘッダ関連、Cookieの上書き関連)
- mod_rewriteモジュール
- mod_log_configモジュール
私が言うまでもありませんが、アップデートが必要か否かはプラットフォームや利用状況によって変わってきます。Apacheの管理に携わる方は自分でCHANGESファイルを確認したうえで判断してくださいね。