diff options
author | Andi Gutmans <andi@php.net> | 2001-07-10 20:38:39 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2001-07-10 20:38:39 +0000 |
commit | 4b54140a35f5c8479bfdb0cc1036ad40bc905a9d (patch) | |
tree | 496fbe971d9c8ca3c2fd9984534fc70330044c61 | |
parent | 203ea6c51dfdc98435f51034c7c4c7a4340e9cb0 (diff) | |
download | php-git-4b54140a35f5c8479bfdb0cc1036ad40bc905a9d.tar.gz |
- Commit patch which checks for an include file in the calling scripts'
current working directory if everything else fails (include_path).
- Right now this also effects things like opening php.ini. It'll now always
check in the current working directory for php.ini. I think this doesn't
screw up todays behavior.
-rw-r--r-- | main/fopen_wrappers.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index 6f30aa09cd..a810d75243 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -443,8 +443,39 @@ PHPAPI FILE *php_fopen_with_path(char *filename, char *mode, char *path, char ** } ptr = end; } + efree(pathbuf); - return NULL; + + { + char *exec_fname; + int exec_fname_len; + char *filename_dir; + ELS_FETCH(); + + exec_fname = zend_get_executed_filename(ELS_C); + exec_fname_len = strlen(exec_fname); + + pathbuf = (char *) emalloc(exec_fname_len+filename_length+1+1); /* Over allocate to save time */ + memcpy(pathbuf, exec_fname, exec_fname_len+1); + + while ((--exec_fname_len >= 0) && !IS_SLASH(pathbuf[exec_fname_len])) { + } + pathbuf[exec_fname_len] = DEFAULT_SLASH; + memcpy(&pathbuf[exec_fname_len+1], filename, filename_length+1); + + fprintf(stderr,"Trying to open %s\n", pathbuf); + + if (PG(safe_mode)) { + if (VCWD_STAT(pathbuf, &sb) == 0 && (!php_checkuid(pathbuf, mode, CHECKUID_CHECK_MODE_PARAM))) { + efree(pathbuf); + return NULL; + } + } + fp = php_fopen_and_set_opened_path(pathbuf, mode, opened_path); + efree(pathbuf); + return fp; + } + return NULL; /* Not really needed anymore */ } /* }}} */ |