]> granicus.if.org Git - php/commitdiff
- Commit patch which checks for an include file in the calling scripts'
authorAndi Gutmans <andi@php.net>
Tue, 10 Jul 2001 20:38:39 +0000 (20:38 +0000)
committerAndi Gutmans <andi@php.net>
Tue, 10 Jul 2001 20:38:39 +0000 (20:38 +0000)
  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.

main/fopen_wrappers.c

index 6f30aa09cd3292c46a32a0efb62fc0ef6d3530b0..a810d7524344cc0bb8102c0762dd460f90790044 100644 (file)
@@ -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 */
 }
 /* }}} */