#19292 [Com]: random error: open_basedir restriction in effect. File is in wrong directory
| From: | mbr at freebsd dot org | Date: | Thu, 24 Oct 2002 15:32:15 +0000 |
| Subject: | #19292 [Com]: random error: open_basedir restriction in effect. File is in wrong directory | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-23209@lists.php.net to get a copy of this message | ||
ID: 19292
Comment by: mbr@freebsd.org
Reported By: tnowak@triger.com.pl
Status: Feedback
Bug Type: Apache related
Operating System: linux
PHP Version: 4.3.0-dev,4.2.3
New Comment:
Looks like this bug is more serious than I thought. With
my workaround I get now randomly:
[24-Oct-2002 17:18:04] PHP Warning: Failed opening
'/include/banner.php' for inclusion (include_path='.') in
/www/doc/www.aaa.ch-80/wrapper.php on line 45
[24-Oct-2002 17:18:04] PHP Warning: Failed opening
'/include/services_2nd.inc' for inclusion (include_path='.') in
/www/doc/www.aaa.ch-80/wrapper.php on line 132
It really looks into the wrong dirs.
zend_get_executed_filename(TSRMLS_C) and path are not the
always the same.
Maybe this is a off by one error somewhere ?
Martin
Previous Comments:
------------------------------------------------------------------------
[2002-10-24 05:05:47] mbr@freebsd.org
Heh, now happens the opposite:
[24-Oct-2002 11:55:45] PHP Warning: open_basedir: File should be in
/www/doc/www.customer.ch-80, but is in
/www/doc/www.customer.org-80/photos/index.php file
(/www/doc/www.aaa.ch-80/formmail.php) in Unknown on line 0
I added now both cases. Works so far :P but doesn't solve
the real problem.
http://people.freebsd.org/~mbr/patches/fopen_wrappers.c.diff
------------------------------------------------------------------------
[2002-10-24 04:26:38] mbr@freebsd.org
I'm using this workaround for now. It solves the
problem:
--- main/fopen_wrappers.c.orig Wed Oct 23 11:49:40 2002
+++ main/fopen_wrappers.c Thu Oct 24 11:22:18 2002
@@ -189,10 +189,12 @@
/* Only check when open_basedir is available */
if (PG(open_basedir) && *PG(open_basedir)) {
char *pathbuf;
+ char *newpath;
char *ptr;
char *end;
pathbuf = estrdup(PG(open_basedir));
+ newpath =
estrdup(zend_get_executed_filename(TSRMLS_C));
ptr = pathbuf;
@@ -203,15 +205,18 @@
end++;
}
- if (php_check_specific_open_basedir(ptr, path
TSRMLS_CC) == 0) {
+ if (php_check_specific_open_basedir(ptr,
newpath TSRMLS_CC) == 0) {
efree(pathbuf);
+ efree(newpath);
return 0;
}
ptr = end;
}
- php_error(E_WARNING, "open_basedir restriction in
effect. File is in wrong directory");
+ php_error(E_WARNING, "open_basedir: File should be in
%s, but is in %s file (%s)",
+ pathbuf, path, newpath);
efree(pathbuf);
+ efree(newpath);
errno = EPERM; /* we deny permission to open it */
return -1;
}
@@ -226,8 +231,8 @@
PHPAPI int php_check_safe_mode_include_dir(char *path TSRMLS_DC)
{
/* Only check when safe_mode on and safe_mode_include_dir is
available */
- if (PG(safe_mode) && PG(safe_mode_include_dir) &&
- *PG(safe_mode_include_dir))
+ if (((PG(open_basedir) && *PG(open_basedir)) || PG(safe_mode))
+ && PG(safe_mode_include_dir) &&
*PG(safe_mode_include_dir))
{
char *pathbuf;
char *ptr;
@@ -268,7 +273,7 @@
}
/* Nothing to check... */
- return -1;
+ return 0;
}
/* }}} */
------------------------------------------------------------------------
[2002-10-24 04:04:05] mbr@freebsd.org
I changed the random message:
PHP Warning: open_basedir restriction in effect. File is in wrong
directory in ${some dir}
to include the paths ...
Here you see what is going wrong ...
Completly bogus the message:
[24-Oct-2002 10:49:19] PHP Warning: open_basedir: File should be in
/www/doc/www.aaa.ch-80, but is in /www/doc/
www.bbb.ch-80/html/visions/php//include/globals.inc in
/www/doc/www.aaa.ch-80/index.php on line 2
[24-Oct-2002 10:49:19] PHP Warning: open_basedir: File should be in
/www/doc/www.aaa.ch-80, but is in /www/doc/
www.bbb.ch-80/html/visions/php//wrapper.php in
/www/doc/www.aaa.ch-80/index.php on line 6
[24-Oct-2002 10:49:19] PHP Warning: Cannot add header information -
headers already sent by (output started at /w
ww/doc/www.aaa.ch-80/index.php:2) in /www/doc/www.aaa.ch-80/wrapper.php
on line 4
[24-Oct-2002 10:53:45] PHP Warning: open_basedir: File should be in
/www/doc/www.aaa.ch-80, but is in /www/doc/
www.bbb.ch-80/html/visions/php//include/globals.inc in
/www/doc/www.aaa.ch-80/index.php on line 2
[24-Oct-2002 10:53:45] PHP Warning: open_basedir: File should be in
/www/doc/www.aaa.ch-80, but is in /www/doc/
www.bbb.ch-80/html/visions/php//wrapper.php in
/www/doc/www.aaa.ch-80/index.php on line 6
[24-Oct-2002 10:53:45] PHP Warning: Cannot add header information -
headers already sent by (output started at /w
ww/doc/www.aaa.ch-80/index.php:2) in /www/doc/www.aaa.ch-80/wrapper.php
on line 4
There is something seriously broken !
Martin
------------------------------------------------------------------------
[2002-10-24 03:09:09] gatalyak@yahoo.com
I also had trouble with php 4.2.3 running as mod with apache 1.3.27 on
FreeBSD 4.7. Sometimes got error:
Warning: Failed opening '/home/user/public_html/index.php' for
inclusion
(include_path='.:/usr/local/lib/php') in Unknown on line 0
my virtual host configuration was:
...
DocumentRoot /home/user/public_html
php_admin_value doc_root /home/user/public_html
php_admin_value open_basedir
"/home/user/public_html/:/usr/local/lib/php/"
...
but here directory /home was a symlink to /usr/home
after making chahges in httpd.conf to the following:
DocumentRoot /usr/home/user/public_html
php_admin_value doc_root /usr/home/user/public_html
php_admin_value open_basedir
"/usr/home/user/public_html/:/usr/local/lib/php/"
everything works fine.
Is it error with symlink in php?
------------------------------------------------------------------------
[2002-10-23 06:25:32] mb@imp.ch
I just added the patch for this problem. I can confirm
that it does _NOT_ fix the problem.
We have several virtual servers running on this host. Most of them use
PHP.
It looks to me that the bug only happens if previously
the apache child has done some specific request for another
php customer without openbasedir.
Could this be possible ?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/19292
--
Edit this bug report at http://bugs.php.net/?id=19292&edit=1