From: Ilia Alshanetsky Date: Tue, 22 Jul 2003 01:32:01 +0000 (+0000) Subject: Make php_check_safe_mode_include_dir check independent of unrelated X-Git-Tag: BEFORE_ARG_INFO~145 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1e92b5e7a36dbd8f1627328d87c51401632b5487;p=php Make php_check_safe_mode_include_dir check independent of unrelated open_basedir directive and make it properly handle undefined/empty safe_mode_include_dir directive when safe_mode is enabled. --- diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index 37ccaa6d4b..e12f0a992a 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -213,45 +213,44 @@ PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC) */ PHPAPI int php_check_safe_mode_include_dir(char *path TSRMLS_DC) { - /* Only check when safe_mode or open_basedir is on and safe_mode_include_dir is available */ - if (((PG(open_basedir) && *PG(open_basedir)) || PG(safe_mode)) && - PG(safe_mode_include_dir) && *PG(safe_mode_include_dir)) - { - char *pathbuf; - char *ptr; - char *end; - char resolved_name[MAXPATHLEN]; - - /* Resolve the real path into resolved_name */ - if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) - return -1; - - pathbuf = estrdup(PG(safe_mode_include_dir)); - - ptr = pathbuf; - - while (ptr && *ptr) { - end = strchr(ptr, DEFAULT_DIR_SEPARATOR); - if (end != NULL) { - *end = '\0'; - end++; - } + if (PG(safe_mode)) { + if (PG(safe_mode_include_dir) && *PG(safe_mode_include_dir)) { + char *pathbuf; + char *ptr; + char *end; + char resolved_name[MAXPATHLEN]; + + /* Resolve the real path into resolved_name */ + if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL) + return -1; + + pathbuf = estrdup(PG(safe_mode_include_dir)); + + ptr = pathbuf; + + while (ptr && *ptr) { + end = strchr(ptr, DEFAULT_DIR_SEPARATOR); + if (end != NULL) { + *end = '\0'; + end++; + } - /* Check the path */ + /* Check the path */ #ifdef PHP_WIN32 - if (strncasecmp(ptr, resolved_name, strlen(ptr)) == 0) + if (strncasecmp(ptr, resolved_name, strlen(ptr)) == 0) #else - if (strncmp(ptr, resolved_name, strlen(ptr)) == 0) + if (strncmp(ptr, resolved_name, strlen(ptr)) == 0) #endif - { - /* File is in the right directory */ - efree(pathbuf); - return 0; - } + { + /* File is in the right directory */ + efree(pathbuf); + return 0; + } - ptr = end; + ptr = end; + } + efree(pathbuf); } - efree(pathbuf); return -1; }