fixed subtle bugs regarding attempting to chdir, plus cleanup issues. improved tempnam test, removed hardcoded line number. tested on windows, linux and linux 64bit.

This commit is contained in:
Dave Kelsey 2009-01-22 07:56:56 +00:00
parent ba5407d065
commit aa3e1f6158
27 changed files with 142 additions and 91 deletions

View File

@ -59,7 +59,7 @@ function recursive_delete_directory($directory) {
function create_directories() {
delete_directories();
$directory = dirname(__FILE__);
$directory = getcwd();
var_dump(mkdir($directory."/test"));
var_dump(mkdir($directory."/test/ok"));
@ -69,25 +69,28 @@ function create_directories() {
}
function delete_directories() {
$directory = (dirname(__FILE__)."/test");
$directory = (getcwd()."/test");
recursive_delete_directory($directory);
}
function test_open_basedir_error($function) {
global $savedDirectory;
var_dump($function("../bad"));
var_dump($function("../bad/bad.txt"));
var_dump($function(".."));
var_dump($function("../"));
var_dump($function("/"));
var_dump($function("../bad/."));
$directory = dirname(__FILE__);
$directory = $savedDirectory;
var_dump($function($directory."/test/bad/bad.txt"));
var_dump($function($directory."/test/bad/../bad/bad.txt"));
}
function test_open_basedir_before($function, $change = TRUE) {
global $savedDirectory;
echo "*** Testing open_basedir configuration [$function] ***\n";
$directory = dirname(__FILE__);
$directory = getcwd();
$savedDirectory = $directory;
var_dump(chdir($directory));
create_directories();
@ -104,26 +107,29 @@ function test_open_basedir_after($function) {
// This is used by functions that return an array on success
function test_open_basedir_array($function) {
global $savedDirectory;
test_open_basedir_before($function);
test_open_basedir_error($function);
var_dump(is_array($function("./../.")));
var_dump(is_array($function("../ok")));
var_dump(is_array($function("ok.txt")));
var_dump(is_array($function("../ok/ok.txt")));
$directory = dirname(__FILE__);
$directory = $savedDirectory;
var_dump(is_array($function($directory."/test/ok/ok.txt")));
var_dump(is_array($function($directory."/test/ok/../ok/ok.txt")));
test_open_basedir_after($function);
}
function test_open_basedir($function) {
global $savedDirectory;
test_open_basedir_before($function);
test_open_basedir_error($function);
var_dump($function("./../."));
var_dump($function("../ok"));
var_dump($function("ok.txt"));
var_dump($function("../ok/ok.txt"));
$directory = dirname(__FILE__);
$directory = $savedDirectory;
var_dump($function($directory."/test/ok/ok.txt"));
var_dump($function($directory."/test/ok/../ok/ok.txt"));
test_open_basedir_after($function);

View File

@ -6,7 +6,6 @@ open_basedir=.
<?php
require_once "open_basedir.inc";
test_open_basedir_before("chdir");
$directory = dirname(__FILE__);
var_dump(chdir("../bad"));
var_dump(chdir(".."));

View File

@ -5,8 +5,9 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("chmod");
$directory = dirname(__FILE__);
var_dump(chmod("../bad", 0600));
var_dump(chmod("../bad/bad.txt", 0600));
@ -17,12 +18,12 @@ var_dump(chmod("../bad/.", 0600));
var_dump(chmod("../bad/./bad.txt", 0600));
var_dump(chmod("./../.", 0600));
var_dump(chmod($directory."/test/ok/ok.txt", 0600));
var_dump(chmod($initdir."/test/ok/ok.txt", 0600));
var_dump(chmod("./ok.txt", 0600));
var_dump(chmod("ok.txt", 0600));
var_dump(chmod("../ok/ok.txt", 0600));
var_dump(chmod("../ok/./ok.txt", 0600));
chmod($directory."/test/ok/ok.txt", 0777);
chmod($initdir."/test/ok/ok.txt", 0777);
test_open_basedir_after("chmod");
?>

View File

@ -6,7 +6,6 @@ open_basedir=.
<?php
require_once "open_basedir.inc";
test_open_basedir_before("copy");
$directory = dirname(__FILE__);
var_dump(copy("ok.txt", "../bad"));
var_dump(copy("ok.txt", "../bad/bad.txt"));

View File

@ -6,7 +6,6 @@ open_basedir=.
<?php
require_once "open_basedir.inc";
test_open_basedir_before("copy");
$directory = dirname(__FILE__);
var_dump(copy("../bad/bad.txt", "copy.txt"));
var_dump(unlink("copy.txt"));

View File

@ -5,13 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("dir");
test_open_basedir_error("dir");
$directory = dirname(__FILE__);
var_dump(dir($directory."/test/ok/"));
var_dump(dir($directory."/test/ok"));
var_dump(dir($directory."/test/ok/../ok"));
var_dump(dir($initdir."/test/ok/"));
var_dump(dir($initdir."/test/ok"));
var_dump(dir($initdir."/test/ok/../ok"));
test_open_basedir_after("dir");?>
--CLEAN--

View File

@ -5,11 +5,11 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("disk_free_space");
test_open_basedir_error("disk_free_space");
$directory = dirname(__FILE__);
var_dump(disk_free_space($directory."/test/ok"));
var_dump(disk_free_space($initdir."/test/ok"));
test_open_basedir_after("disk_free_space");
?>
--CLEAN--

View File

@ -6,14 +6,15 @@ error_log=
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("error_log");
$directory = dirname(__FILE__);
var_dump(ini_set("error_log", $directory."/test/bad/bad.txt"));
var_dump(ini_set("error_log", $directory."/test/bad.txt"));
var_dump(ini_set("error_log", $directory."/bad.txt"));
var_dump(ini_set("error_log", $directory."/test/ok/ok.txt"));
var_dump(ini_set("error_log", $directory."/test/ok/ok.txt"));
var_dump(ini_set("error_log", $initdir."/test/bad/bad.txt"));
var_dump(ini_set("error_log", $initdir."/test/bad.txt"));
var_dump(ini_set("error_log", $initdir."/bad.txt"));
var_dump(ini_set("error_log", $initdir."/test/ok/ok.txt"));
var_dump(ini_set("error_log", $initdir."/test/ok/ok.txt"));
test_open_basedir_after("error_log");
?>

View File

@ -5,14 +5,15 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("error_log");
$directory = dirname(__FILE__);
define("DESTINATION_IS_FILE", 3);
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $directory."/test/bad/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $directory."/test/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $directory."/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $directory."/test/ok/ok.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $initdir."/test/bad/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $initdir."/test/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $initdir."/bad.txt"));
var_dump(error_log("Hello World!", DESTINATION_IS_FILE, $initdir."/test/ok/ok.txt"));
test_open_basedir_after("error_log");
?>

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$directory = dirname(__FILE__);
$initdir = getcwd();
test_open_basedir_before("file");
test_open_basedir_error("file");
var_dump(file("ok.txt"));
var_dump(file("../ok/ok.txt"));
var_dump(file($directory."/test/ok/ok.txt"));
var_dump(file($directory."/test/ok/../ok/ok.txt"));
var_dump(file($initdir."/test/ok/ok.txt"));
var_dump(file($initdir."/test/ok/../ok/ok.txt"));
test_open_basedir_after("file");
?>

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$directory = dirname(__FILE__);
$initdir = getcwd();
test_open_basedir_before("file_get_contents");
test_open_basedir_error("file_get_contents");
var_dump(file_get_contents("ok.txt"));
var_dump(file_get_contents("../ok/ok.txt"));
var_dump(file_get_contents($directory."/test/ok/ok.txt"));
var_dump(file_get_contents($directory."/test/ok/../ok/ok.txt"));
var_dump(file_get_contents($initdir."/test/ok/ok.txt"));
var_dump(file_get_contents($initdir."/test/ok/../ok/ok.txt"));
test_open_basedir_after("file_get_contents");
?>

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("file_put_contents");
$directory = dirname(__FILE__);
var_dump(file_put_contents("../bad/bad.txt", "Hello World!"));
var_dump(file_put_contents(".././bad/bad.txt", "Hello World!"));
var_dump(file_put_contents("../bad/../bad/bad.txt", "Hello World!"));
var_dump(file_put_contents("./.././bad/bad.txt", "Hello World!"));
var_dump(file_put_contents($directory."/test/bad/bad.txt", "Hello World!"));
var_dump(file_put_contents($initdir."/test/bad/bad.txt", "Hello World!"));
test_open_basedir_after("file_put_contents");
?>

View File

@ -5,8 +5,8 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("fopen");
$directory = dirname(__FILE__);
var_dump(fopen("../bad", "r"));
var_dump(fopen("../bad/bad.txt", "r"));
@ -17,7 +17,7 @@ var_dump(fopen("../bad/.", "r"));
var_dump(fopen("../bad/./bad.txt", "r"));
var_dump(fopen("./../.", "r"));
var_dump(fopen($directory."/test/ok/ok.txt", "r"));
var_dump(fopen($initdir."/test/ok/ok.txt", "r"));
var_dump(fopen("./ok.txt", "r"));
var_dump(fopen("ok.txt", "r"));
var_dump(fopen("../ok/ok.txt", "r"));

View File

@ -0,0 +1,26 @@
--TEST--
Test open_basedir configuration for glob
--INI--
open_basedir=.
--FILE--
<?php
$dir = "globtest1";
$dir2 = "globtest2";
mkdir($dir);
mkdir($dir2);
chdir($dir);
var_dump(glob("../globtest*"));
?>
--CLEAN--
<?php
$dir = "globtest1";
$dir2 = "globtest2";
rmdir($dir);
rmdir($dir2);
?>
--EXPECT--
array(1) {
[0]=>
string(12) "../globtest1"
}

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("is_executable");
test_open_basedir_error("is_executable");
var_dump(is_executable("ok.txt"));
var_dump(is_executable("../ok/ok.txt"));
$directory = dirname(__FILE__);
var_dump(is_executable($directory."/test/ok/ok.txt"));
var_dump(is_executable($directory."/test/ok/../ok/ok.txt"));
var_dump(is_executable($initdir."/test/ok/ok.txt"));
var_dump(is_executable($initdir."/test/ok/../ok/ok.txt"));
test_open_basedir_after("is_executable");
?>

View File

@ -11,23 +11,23 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("link");
$directory = dirname(__FILE__);
$target = ($directory."/test/ok/ok.txt");
$target = ($initdir."/test/ok/ok.txt");
var_dump(link($target, "../bad/link.txt"));
var_dump(link($target, "../link.txt"));
var_dump(link($target, "../bad/./link.txt"));
var_dump(link($target, "./.././link.txt"));
$link = ($directory."/test/ok/link.txt");
$link = ($initdir."/test/ok/link.txt");
var_dump(link("../bad/bad.txt", $link));
var_dump(link("../bad", $link));
var_dump(link("../bad/./bad.txt", $link));
var_dump(link("../bad/bad.txt", $link));
var_dump(link("./.././bad", $link));
$target = ($directory."/test/ok/ok.txt");
$target = ($initdir."/test/ok/ok.txt");
var_dump(link($target, $link));
var_dump(unlink($link));

View File

@ -11,25 +11,25 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("linkinfo", FALSE);
$directory = dirname(__FILE__);
chdir($directory);
chdir($initdir);
$target = ($directory."/test/bad/bad.txt");
$symlink = ($directory."/test/ok/symlink.txt");
$target = ($initdir."/test/bad/bad.txt");
$symlink = ($initdir."/test/ok/symlink.txt");
var_dump(symlink($target, $symlink));
chdir($directory."/test/ok");
chdir($initdir."/test/ok");
var_dump(linkinfo("symlink.txt"));
var_dump(linkinfo("../ok/symlink.txt"));
var_dump(linkinfo("../ok/./symlink.txt"));
var_dump(linkinfo("./symlink.txt"));
var_dump(linkinfo($directory."/test/ok/symlink.txt"));
var_dump(linkinfo($initdir."/test/ok/symlink.txt"));
$target = ($directory."/test/ok/ok.txt");
$symlink = ($directory."/test/ok/symlink.txt");
$target = ($initdir."/test/ok/ok.txt");
$symlink = ($initdir."/test/ok/symlink.txt");
var_dump(symlink($target, $symlink));
var_dump(linkinfo($symlink));
var_dump(unlink($symlink));

View File

@ -11,16 +11,16 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("mkdir");
$directory = dirname(__FILE__);
var_dump(mkdir("../bad/blah"));
var_dump(mkdir("../blah"));
var_dump(mkdir("../bad/./blah"));
var_dump(mkdir("./.././blah"));
var_dump(mkdir($directory."/test/ok/blah"));
var_dump(rmdir($directory."/test/ok/blah"));
var_dump(mkdir($initdir."/test/ok/blah"));
var_dump(rmdir($initdir."/test/ok/blah"));
test_open_basedir_after("mkdir");
?>
--CLEAN--

View File

@ -5,13 +5,13 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("opendir");
test_open_basedir_error("opendir");
$directory = dirname(__FILE__);
var_dump(opendir($directory."/test/ok/"));
var_dump(opendir($directory."/test/ok"));
var_dump(opendir($directory."/test/ok/../ok"));
var_dump(opendir($initdir."/test/ok/"));
var_dump(opendir($initdir."/test/ok"));
var_dump(opendir($initdir."/test/ok/../ok"));
test_open_basedir_after("opendir");?>
--CLEAN--

View File

@ -11,25 +11,25 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("readlink", FALSE);
$directory = dirname(__FILE__);
chdir($directory);
chdir($initdir);
$target = ($directory."/test/bad/bad.txt");
$symlink = ($directory."/test/ok/symlink.txt");
$target = ($initdir."/test/bad/bad.txt");
$symlink = ($initdir."/test/ok/symlink.txt");
var_dump(symlink($target, $symlink));
chdir($directory."/test/ok");
chdir($initdir."/test/ok");
var_dump(readlink("symlink.txt"));
var_dump(readlink("../ok/symlink.txt"));
var_dump(readlink("../ok/./symlink.txt"));
var_dump(readlink("./symlink.txt"));
var_dump(readlink($directory."/test/ok/symlink.txt"));
var_dump(readlink($initdir."/test/ok/symlink.txt"));
$target = ($directory."/test/ok/ok.txt");
$symlink = ($directory."/test/ok/symlink.txt");
$target = ($initdir."/test/ok/ok.txt");
$symlink = ($initdir."/test/ok/symlink.txt");
var_dump(symlink($target, $symlink));
var_dump(readlink($symlink));
var_dump(unlink($symlink));

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("rename");
$directory = dirname(__FILE__);
var_dump(rename("../bad/bad.txt", "rename.txt"));
var_dump(rename(".././bad/bad.txt", "rename.txt"));
var_dump(rename("../bad/../bad/bad.txt", "rename.txt"));
var_dump(rename("./.././bad/bad.txt", "rename.txt"));
var_dump(rename($directory."/test/bad/bad.txt", "rename.txt"));
var_dump(rename($initdir."/test/bad/bad.txt", "rename.txt"));
test_open_basedir_after("rename");
?>

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("rmdir");
$directory = dirname(__FILE__);
var_dump(rmdir("../bad"));
var_dump(rmdir(".././bad"));
var_dump(rmdir("../bad/../bad"));
var_dump(rmdir("./.././bad"));
var_dump(rmdir($directory."/test/bad"));
var_dump(rmdir($initdir."/test/bad"));
test_open_basedir_after("rmdir");
?>

View File

@ -5,13 +5,13 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("scandir");
test_open_basedir_error("scandir");
$directory = dirname(__FILE__);
var_dump(scandir($directory."/test/ok/"));
var_dump(scandir($directory."/test/ok"));
var_dump(scandir($directory."/test/ok/../ok"));
var_dump(scandir($initdir."/test/ok/"));
var_dump(scandir($initdir."/test/ok"));
var_dump(scandir($initdir."/test/ok/../ok"));
test_open_basedir_after("scandir");?>
--CLEAN--
@ -48,7 +48,7 @@ Warning: scandir(..): failed to open dir: %s in %s on line %d
Warning: scandir(): (errno 1): %s in %s on line %d
bool(false)
Warning: scandir(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line 80
Warning: scandir(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
Warning: scandir(../): failed to open dir: %s in %s on line %d

View File

@ -11,30 +11,30 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("symlink");
$directory = dirname(__FILE__);
$target = ($directory."/test/ok/ok.txt");
$target = ($initdir."/test/ok/ok.txt");
var_dump(symlink($target, "../bad/symlink.txt"));
var_dump(symlink($target, "../symlink.txt"));
var_dump(symlink($target, "../bad/./symlink.txt"));
var_dump(symlink($target, "./.././symlink.txt"));
$symlink = ($directory."/test/ok/symlink.txt");
$symlink = ($initdir."/test/ok/symlink.txt");
var_dump(symlink("../bad/bad.txt", $symlink));
var_dump(symlink("../bad", $symlink));
var_dump(symlink("../bad/./bad.txt", $symlink));
var_dump(symlink("../bad/bad.txt", $symlink));
var_dump(symlink("./.././bad", $symlink));
$target = ($directory."/test/ok/ok.txt");
$target = ($initdir."/test/ok/ok.txt");
var_dump(symlink($target, $symlink));
var_dump(unlink($symlink));
var_dump(mkdir("ok2"));
$symlink = ($directory."/test/ok/ok2/ok.txt");
var_dump(symlink("../ok.txt", $symlink)); // $target == (dirname($symlink)."/".$target) == ($directory."/test/ok/ok.txt");
$symlink = ($initdir."/test/ok/ok2/ok.txt");
var_dump(symlink("../ok.txt", $symlink)); // $target == (dirname($symlink)."/".$target) == ($initdir."/test/ok/ok.txt");
var_dump(unlink($symlink));
test_open_basedir_after("symlink");

View File

@ -5,8 +5,8 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("tempnam");
$directory = dirname(__FILE__);
var_dump(tempnam("../bad", "test"));
var_dump(tempnam("..", "test"));
@ -14,8 +14,19 @@ var_dump(tempnam("../", "test"));
var_dump(tempnam("/", "test"));
var_dump(tempnam("../bad/.", "test"));
var_dump(tempnam("./../.", "test"));
var_dump(tempnam("", "test"));
$file = tempnam($directory."/test/ok", "test");
//absolute test
$file = tempnam($initdir."/test/ok", "test");
var_dump($file);
var_dump(unlink($file));
//relative test
$file = tempnam(".", "test");
var_dump($file);
var_dump(unlink($file));
$file = tempnam("../ok", "test");
var_dump($file);
var_dump(unlink($file));
@ -51,6 +62,13 @@ bool(false)
Warning: tempnam(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
bool(false)
Warning: tempnam(): open_basedir restriction in effect. File() is not within the allowed path(s): (.) in %s on line %d
bool(false)
string(%d) "%s"
bool(true)
string(%d) "%s"
bool(true)
string(%d) "%s"
bool(true)
*** Finished testing open_basedir configuration [tempnam] ***

View File

@ -5,8 +5,8 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("touch");
$directory = dirname(__FILE__);
var_dump(touch("../bad"));
var_dump(touch("../bad/bad.txt"));
@ -17,7 +17,7 @@ var_dump(touch("../bad/."));
var_dump(touch("../bad/./bad.txt"));
var_dump(touch("./../."));
var_dump(touch($directory."/test/ok/ok.txt"));
var_dump(touch($initdir."/test/ok/ok.txt"));
var_dump(touch("./ok.txt"));
var_dump(touch("ok.txt"));
var_dump(touch("../ok/ok.txt"));

View File

@ -5,14 +5,14 @@ open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
$initdir = getcwd();
test_open_basedir_before("unlink");
$directory = dirname(__FILE__);
var_dump(unlink("../bad/bad.txt"));
var_dump(unlink(".././bad/bad.txt"));
var_dump(unlink("../bad/../bad/bad.txt"));
var_dump(unlink("./.././bad/bad.txt"));
var_dump(unlink($directory."/test/bad/bad.txt"));
var_dump(unlink($initdir."/test/bad/bad.txt"));
test_open_basedir_after("unlink");
?>