[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 メーリングリストの案内