新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mvg.biglobe.ne.jp>
Subject: Re: 「I=npc.idx」が必須なのはなぜ?
Date: 2000/11/29 22:37:55
Reference: mesh.npc.2/00874

11月29日に、伊藤さんは書きました。

>>出すときに、オプションに「I=npc.idx」が無いと「BAD npc.idx File」というエラーになっ
>
>このエラーメッセージですが、正確に言うと以下のようになっています。
>
>/home/..(中略)../cgi-bin/npc.cgi(1): BAD npc.idx File
>
>これは「I=」オプションを使用しないときの定義ファイルのデフォルト値が、何故かnpc.idxで
>はなくnpc.cgiになっているとではないでしょうか? そしてnpc.cgiを設定ファイルと勘違い
>して読み込みをするが設定ファイルではないのでエラーを出したということに考えられます。

確かに、/home/.../cgi-bin/npc.cgi を設定ファイルと思って呼んでいますね。

>素人考えですがRaQ3がCGIWrap経由でCGIを実行していることが原因でしょうか?

おそらく、CGI Wrapper から npc.cgi への呼び出しを、

/.../cgiwrap/USERID/cgi-bin/npc.cgi?...

のような形式で行っているのじゃないか、と思うのですが、どうでしょうか?

npc.cgi からの設定ファイル指定には I=... 以外にも PATH_INFO 形式でも出来るのですが、
CGI Wrapper から npc.cgi の呼び出しに PATH_INFO 形式を使っているため、その時の情報が
npc.cgi にも渡ってしまい、npc.cgi 自身のパスを設定ファイルと思ってしまったようですね。

I=... のオプション設定をすれば、デフォルトの PATH_INFO による設定に優先されますから
正常な設定ファイルが読めた、という事でしょう。

もしも、PATH_INFO による設定を無視させたいなら、param.c の 108〜111 行にある、

| if (((str = getenv("PATH_INFO")) != NULL) && (*str != EOS)
|  && ((str = getenv("PATH_TRANSLATED")) != NULL) && (*str != EOS)) {
|         env.index = new_str(str);
| }

の部分を削除してしまえば良いです。

そうでないなら、毎回 I=... を書く必要がありますね。

# この頃、CGI Wrapper では無く、SuEXEC によりユーザ権限へ移行するのが一般的に
# なってしまったので、あまり PATH_INFO がらみのトラブルは聞かなくなりましたね。(^^)