68user's page 掲示板

Prev< No. 243> Next  [最新発言に戻る] [過去ログ一覧]
No. 243 # 68user 1999/03/29 (月) 16:11
一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。
    #!/usr/local/bin/perl
    $|=1;
    print "Content-type: text/plain\n\n";
    open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
    while (<STDIN>){
        print EXEC;
    }
という内容の wrapper.cgi を作ってください。hoge.cgiの動作チェックをしたいなら
    /~user/cgi-bin/wrapper.cgi/hoge.cgi

    /~user/cgi-bin/wrapper.cgi/hoge.cgi?data

などというURLで実行してください。そしたら、
    - $|=1を付けないと Content-type より ls の結果が先に出力されてること
    - system や open(COMMAND,"command |") の中で
            cat: /etc/master.passwd: Permission denied
        などのエラーが起こっていること

がわかるでしょう。一連の環境変数(QUERY_STRINGなど)は引き継がれますし、
POSTの場合のデータの受け渡しもできます。

というわけで、CGIが動かなかったら、まずはこれでチェックして
みてください。

あと
> もしかしたらそのとき作成したファイルのオーナーは実効ユーザIDでなく、
> 実ユーザIDが使われるのかもしれません。
は、suidなperlスクリプト中で新規ファイルを作成した場合は
perlスクリプト所有者権限で動きました。つまり
    uid=65534(nobody) euid=0(root)
の場合、新規ファイルのオーナーはrootになりました。

Prev< No. 243> Next  [最新発言に戻る] [過去ログ一覧]