summaryrefslogtreecommitdiff
path: root/ext/standard/file.c
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2001-12-21 08:04:21 +0000
committerDerick Rethans <derick@php.net>2001-12-21 08:04:21 +0000
commite5c08b815fcdf26be824843dc8d660fd02438937 (patch)
tree5888327695f0d023b6942f4dccd6279edd8376d8 /ext/standard/file.c
parent25058db066f68f62854cdbce12b800df9d75d698 (diff)
downloadphp-git-e5c08b815fcdf26be824843dc8d660fd02438937.tar.gz
- Added open basedir checks to file functions. (Patch by
Christoph Kassen <chkassen@chkassen.de>)
Diffstat (limited to 'ext/standard/file.c')
-rw-r--r--ext/standard/file.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 48709bfb2f..20cf1cda84 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -1463,10 +1463,15 @@ PHP_FUNCTION(mkdir)
convert_to_long_ex(arg2);
mode = (mode_t) Z_LVAL_PP(arg2);
+
if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(arg1), NULL, CHECKUID_ALLOW_ONLY_DIR))) {
RETURN_FALSE;
}
+ if (php_check_open_basedir(Z_STRVAL_PP(arg1) TSRMLS_CC)) {
+ RETURN_FALSE;
+ }
+
ret = VCWD_MKDIR(Z_STRVAL_PP(arg1), mode);
if (ret < 0) {
php_error(E_WARNING, "mkdir() failed (%s)", strerror(errno));
@@ -1488,10 +1493,15 @@ PHP_FUNCTION(rmdir)
}
convert_to_string_ex(arg1);
+
if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(arg1), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
RETURN_FALSE;
}
+ if (php_check_open_basedir(Z_STRVAL_PP(arg1) TSRMLS_CC)) {
+ RETURN_FALSE;
+ }
+
ret = VCWD_RMDIR(Z_STRVAL_PP(arg1));
if (ret < 0) {
php_error(E_WARNING, "rmdir() failed (%s)", strerror(errno));
@@ -1695,6 +1705,11 @@ PHP_FUNCTION(rename)
if (PG(safe_mode) &&(!php_checkuid(old_name, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
RETURN_FALSE;
}
+
+ if (php_check_open_basedir(old_name TSRMLS_CC)) {
+ RETURN_FALSE;
+ }
+
ret = VCWD_RENAME(old_name, new_name);
if (ret == -1) {
@@ -1722,6 +1737,10 @@ PHP_FUNCTION(unlink)
RETURN_FALSE;
}
+ if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
+ RETURN_FALSE;
+ }
+
ret = VCWD_UNLINK(Z_STRVAL_PP(filename));
if (ret == -1) {
php_error(E_WARNING, "unlink() failed (%s)", strerror(errno));