[Namazu-devel-ja 1140] Windows 版 Namazu の SUICIDE_TIME の不具合について
Tadamasa Teranishi
yw3t-trns @ asahi-net.or.jp
2006年 8月 2日 (水) 13:01:59 JST
寺西です。
Namazu-win32-users-ja#699 で気づいたのですが、Windows 版 Namazu では
「Namazu: セキュリティに関する考察」「リソースの消費」に
「標準では namazu.cgi は 60 秒で処理を打ち切るようになっています。
2.0.13 よりこの値を設定で変更可能にしました(SUICIDE_TIME directive)。」
とありますが、全然働かないですね。
namazu-cgi.c の中には
signal(SIGALRM, suicide);
alarm(suicide_time);
とあるのですが、alarm が
#define alarm(sec) SetTimer(NULL,1,((sec)*1000),NULL)
と何故か SetTimer になっている上、使えない SIGALRM を signal に
設定しています。
# 作りかけだったのだろうか...。
まじめに実装するのは簡単ではないので、
とりあえず 「Namazu: セキュリティに関する考察」のページには UNIX
限定と書いて、namazurc-sample のコメントに UNIX Only と書き加え
ましょうか。
まじめに実装するなら、
A. SetTimer を使う場合。
TimerProcとメッセージループを自前で用意して、WM_TIMER の処理を
行うようにする。
ただし、現在のプログラムはループ処理に向いていないので大改造の
必要あり。
B. 現在の処理をスレッドで実行する場合。
スレッドを作って、そのスレッドで cgi の処理を行い、
WaitForSingleObject でタイムアウトを行う。
デフォルト60秒とSUICIDE_TIMEの二段階のタイムアウトなので、
処理を2つに分けて実行する必要がある。
といったところでしょうか。いずれにしても UNIX と Windows で随分
違うのが嫌ですね。
個人的には Web サーバの設定で CGI のタイムアウトを設定すれば
なくても良いかなとは思っているのですが。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
Namazu-devel-ja メーリングリストの案内