#38963 [Fbk->Opn]: tempnam bypasses open_basedir
| From: | manuel at mausz dot at | Date: | Tue, 26 Sep 2006 18:45:31 +0000 |
| Subject: | #38963 [Fbk->Opn]: tempnam bypasses open_basedir | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-102756@lists.php.net to get a copy of this message | ||
ID: 38963
User updated by: manuel at mausz dot at
Reported By: manuel at mausz dot at
-Status: Feedback
+Status: Open
Bug Type: Filesystem function related
Operating System: Linux/Gentoo
PHP Version: 4.4.4
New Comment:
Ok, here is the detailed problem:
If tempnam() will be called with an empty string, expand_filepath()
(called from php_check_specific_open_basedir()) will expand this string
to cwd. The cwd is most probably in open_basedir, so
php_check_specific_open_basedir succeeds.
tempnam() will then call php_open_temporary_file() which includes an
fallback to php_get_temporary_directory().
In most apache setups, php is not able to write to the cwd (cause of
safe_mode), so php_open_temporary_file() will fallback. This is not the
case when using client, so php -d open_basedir=
pwd -r
'var_dump(tempnam(false, "temp"));'
works.
Previous Comments:
------------------------------------------------------------------------
[2006-09-26 16:03:30] tony2001@php.net
Make sure your phpinfo() display the expected value of open_basedir.
Turn on display_errors etc.
It doesn't depend on the server API in any way.
------------------------------------------------------------------------
[2006-09-26 15:58:57] manuel at mausz dot at
Please try using mod_php. Using the client also don't work for me.
Oh and just to be sure:
- tried with safe_mode on + off
- open_basedir does _not_ include /tmp ;)
------------------------------------------------------------------------
[2006-09-26 15:30:39] tony2001@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
Cannot reproduce:
# ./sapi/cli/php -r 'var_dump(tempnam(false, "temp"));'
Warning: tempnam(): open_basedir restriction in effect. File() is not
within the allowed path(s): (/www) in Command line code on line 1
bool(false)
------------------------------------------------------------------------
[2006-09-26 15:19:47] manuel at mausz dot at
Description:
------------
tempnam bypasses open_basedir if dir = false
Reproduce code:
---------------
<?php $tempfile = tempnam(false, "phptest"); ?>
Expected result:
----------------
Warning: tempnam() [function.tempnam]: open_basedir restriction in
effect. File(/tmp) is not within the allowed path(s): (...) in
Actual result:
--------------
# ls /tmp/phptest*
/tmp/phptestt4mIOa
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=38963&edit=1