From: Derick Rethans Date: Fri, 21 Dec 2001 08:04:21 +0000 (+0000) Subject: - Added open basedir checks to file functions. (Patch by X-Git-Tag: PRE_ISSET_PATCH~462 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e5c08b815fcdf26be824843dc8d660fd02438937;p=php - Added open basedir checks to file functions. (Patch by Christoph Kassen ) --- 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));