[PHP-users 17425]Re: execが動作しない。

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 8月 21日 (木) 15:40:34 JST


重松です。こんにちは。

> 個人的にもこれが一番怪しいと思いまして先ほどやってみましたところ、やはりこれが原因でした。
> safe_modeをOffにした状態では希望通りの動作をしました。
> 
> このあたりまだ自分の知識不足なのかもしれませんが、
> safe_mode_exec_dir		/home/
> という設定をしていれば /home/ 以下のスクリプトなりプログラムは動作すると考えていたのですが
> これはそういう意味ではないのでしょうか?
> 
> となると、safe_modeを利用しているときはexec関数を使うのは不可能ということになってしまうのでしょうか?

ソースを斜め読みしたところ、safe mode とそうでない場合の違いは基本的に、
exec.c の php_exec のなかの、133 行目の safe mode 判定で決まるようで、
この場合、shell に与えたものを再構成しているようです。

で、PHP 風に書き直すと
if (セーフモード?) {
	// セーフモード動作
	if (引数に 0x20 の空白文字がある?) {
		最初の一文字を \0 (0x00) に置き換える
	}
	if (引数に .. (ピリオド二つ) がある?) {
		エラーにする;
	}
	$新しいコマンド = '';
	if (セーフモードの実行ディレクトリのケツがディレクトリ区切り文字で終
わってる?) {
		$新しいコマンド = $引数;
	}
	else {
		$新しいコマンド = $ディレクトリ区切り文字 . $引数;
	}
	// 以降略

ということで、思うに、セーフモードでは、safe_mode_exec_dir を
ベースとした相対パスでのみバイナリの所在が記述できるように読めます。

というわけで、お試しください。
で、はずしていたら、御免なさい。

-- 
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>



PHP-users メーリングリストの案内