ID:               19292
 Comment by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Feedback
 Bug Type:         Apache related
 Operating System: linux
 PHP Version:      4.3.0-dev,4.2.3
 New Comment:

I also have this problem, in both Solaris 8 and Linux Mandrake with
Apache 1.2.27 with PHP 4.2.2, 4.2.3 and
also 4.3.0r2. In all cases the followig example does not work and php
complains about open_basedir restriction in
all but in 4.3.0r2, where the example does not work and no
warning or error message is issued.

You can reproduce this situation with 3 php scripts with safe_mode on:

/usr/local/http-docs/common/scripts/test.php --------------

<?php
include("test/test.php");
?>

/usr/local/http-docs/common/lib/test/test.php -------------

<?php
phpinfo();
echo "hello";
include("hello.php");
?>

/usr/local/http-docs/common/lib/test/hello.php -------------

<?php
echo "hello world";
?>

Apache configuration to reproduce the situation --------------

<Directory "/usr/local/http-docs/common/lib/">
Options none
AllowOverride None
Order allow,deny
Deny from all
</Directory>

Alias /scripts/ "/usr/local/http-docs/common/scripts/"

<Directory "/usr/local/http-docs/common/scripts/">
Options none
AllowOverride None
Order allow,deny
Allow from all
php_admin_value open_basedir
/usr/local/http-docs/common/scripts/:/usr/local/http-docs/common/lib
</Directory>

<VirtualHost 192.168.0.3>
ServerName 192.168.0.3
DocumentRoot /usr/local/http-docs/test
php_admin_value open_basedir 
/usr/local/http-docs/test:/usr/local/http-docs/common/lib:/var/tmp:/usr/local/lib/php
php_admin_value doc_root /usr/local/http-docs/test
</VirtualHost>

to reproduce the error just go to http://192.168.0.3/scripts/test.php
altough phpinfo() on /usr/local/http-docs/common/lib/test/test.php
 shows that open_basedir includes /usr/local/http-docs/common/lib
 php fails to open hello.php


Previous Comments:
------------------------------------------------------------------------

[2002-10-24 10:32:15] [EMAIL PROTECTED]

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

------------------------------------------------------------------------

[2002-10-24 05:05:47] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

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?

------------------------------------------------------------------------

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

Reply via email to