From:             php dot user at jeremy dot smallinfinity dot net
Operating system: MacOS and RedHat Linux
PHP version:      5.2.1
PHP Bug Type:     *Directory/Filesystem functions
Bug description:  is_readable and file_exists give false negatives when euid != 
uid

Description:
------------
is_readable() and file_exists(), when called from a PHP 4.3.2 (Linux),
4.4.0 (Mac OS) and 5.2.1 (Mac OS) script that is executed with
posix_euid() != posix_uid() does not recognize files that are owned and
readable only by the effective uid.  Instead is_readable() and
file_exists() return "false" even though functions like fileperms, fopen
and readfile work as expected.

Reproduce code:
---------------
#!/usr/bin/php
<?php
echo "My effective UID is ".posix_geteuid()." but my UID is really
".posix_getuid()."\n";

chdir($curdir = dirname(__FILE__)) or die("Unable to enter the private
directory");
echo "The current directory is owned by ".fileowner($curdir)." and has
permissions ".sprintf('%o', fileperms($curdir))."\n";

touch("test.dat");
chmod("test.dat", 0600); // readable only by the effective user

echo "is_readable should give TRUE, and gives ".(is_readable("test.dat") ?
"TRUE" : "FALSE")."\n";

echo "file_exists should give TRUE, and gives ".(file_exists("test.dat") ?
"TRUE" : "FALSE")."\n";

echo "The file has permissions ".sprintf('%o', fileperms("test.dat")).",
is owned by ".fileowner("test.dat")." and is in the
".filegroup("test.dat")." group.\n";

unlink("test.dat"); // no error because the file really does exist!

?>

Expected result:
----------------
My effective UID is 501 but my UID is really [uid]
The current directory is owned by 501 and has permissions 40700
is_readable should give TRUE, and gives TRUE
file_exists should give TRUE, and gives TRUE
The file has permissions 100600, is owned by 501 and is in the 501 group.

Actual result:
--------------
When run as its owner, gives the expected result, with [uid]=501.

When run from a different account using the executable obtained from
#include <unistd.h>

int main(int argc, char **argv) {
  execl("/path/to/reproduce_code.php", "/path/to/reproduce_code.php",
NULL);

}
which is then chmod 04711 or 06711, gives

My effective UID is 501 but my UID is really 503
The current directory is owned by 501 and has permissions 40700
is_readable should give TRUE, and gives FALSE
file_exists should give TRUE, and gives FALSE
The file has permissions 100600, is owned by 501 and is in the 501 group.

These tests are done on Mac OS X 10.4.8 with both PHP 4.4.4 and 5.2.1, but
I first noticed this behaviour with PHP 4.3.2 under Red Hat Linux for which
I do not have root privileges.

-- 
Edit bug report at http://bugs.php.net/?id=40535&edit=1
-- 
Try a CVS snapshot (PHP 4.4): 
http://bugs.php.net/fix.php?id=40535&r=trysnapshot44
Try a CVS snapshot (PHP 5.2): 
http://bugs.php.net/fix.php?id=40535&r=trysnapshot52
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=40535&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=40535&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=40535&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=40535&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=40535&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=40535&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=40535&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=40535&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=40535&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=40535&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=40535&r=globals
PHP 3 support discontinued:   http://bugs.php.net/fix.php?id=40535&r=php3
Daylight Savings:             http://bugs.php.net/fix.php?id=40535&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=40535&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=40535&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=40535&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=40535&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=40535&r=mysqlcfg

Reply via email to