mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Move safemode/basedir checks for url_stat to plain_wrapper.
This commit is contained in:
parent
74eed61504
commit
681d18effd
3 changed files with 21 additions and 9 deletions
|
@ -552,7 +552,7 @@ PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int typ
|
|||
struct stat *stat_sb;
|
||||
#endif
|
||||
php_stream_statbuf ssb;
|
||||
int rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to other */
|
||||
int flags = 0, rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to other */
|
||||
char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
|
||||
"size", "atime", "mtime", "ctime", "blksize", "blocks"};
|
||||
|
||||
|
@ -560,16 +560,14 @@ PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int typ
|
|||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (PG(safe_mode) &&(!php_checkuid_ex(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR, IS_EXISTS_CHECK(type) ? CHECKUID_NO_ERRORS : 0))) {
|
||||
RETURN_FALSE;
|
||||
if (IS_LINK_OPERATION(type)) {
|
||||
flags |= PHP_STREAM_URL_STAT_LINK;
|
||||
}
|
||||
if (IS_EXISTS_CHECK(type)) {
|
||||
flags |= PHP_STREAM_URL_STAT_QUIET;
|
||||
}
|
||||
|
||||
if (php_check_open_basedir_ex(filename, IS_EXISTS_CHECK(type) ? 0 : 1 TSRMLS_CC)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (php_stream_stat_path_ex((char *)filename, (IS_LINK_OPERATION(type) ? PHP_STREAM_URL_STAT_LINK : 0), &ssb, NULL)) {
|
||||
if (php_stream_stat_path_ex((char *)filename, flags, &ssb, NULL)) {
|
||||
/* Error Occured */
|
||||
if (!IS_EXISTS_CHECK(type)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%sstat failed for %s", IS_LINK_OPERATION(type) ? "L" : "", filename);
|
||||
|
|
|
@ -319,6 +319,7 @@ PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, voi
|
|||
|
||||
/* Flags for url_stat method in wrapper ops */
|
||||
#define PHP_STREAM_URL_STAT_LINK 1
|
||||
#define PHP_STREAM_URL_STAT_QUIET 2
|
||||
|
||||
/* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */
|
||||
#define PHP_STREAM_OPTION_BLOCKING 1
|
||||
|
|
|
@ -898,6 +898,19 @@ static php_stream *php_plain_files_stream_opener(php_stream_wrapper *wrapper, ch
|
|||
|
||||
static int php_plain_files_url_stater(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC)
|
||||
{
|
||||
|
||||
if (strncmp(url, "file://", 7) == 0) {
|
||||
url += 7;
|
||||
}
|
||||
|
||||
if (PG(safe_mode) &&(!php_checkuid_ex(url, NULL, CHECKUID_CHECK_FILE_AND_DIR, (flags & PHP_STREAM_URL_STAT_QUIET) ? CHECKUID_NO_ERRORS : 0))) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (php_check_open_basedir_ex(url, (flags & PHP_STREAM_URL_STAT_QUIET) ? 0 : 1 TSRMLS_CC)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYMLINK
|
||||
if (flags & PHP_STREAM_URL_STAT_LINK) {
|
||||
return VCWD_LSTAT(url, &ssb->sb);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue