ID:               46498
 Updated by:       j...@php.net
 Reported By:      registrace at koren dot cz
-Status:           Open
+Status:           Feedback
 Bug Type:         Filesystem function related
 Operating System: Linux
 PHP Version:      5.2.6
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/




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

[2008-11-05 21:01:31] registrace at koren dot cz

Description:
------------
PHP Function is_writable() sometimes reports false results.

Requirements: Linux - getuid() != geteuid()

After inspection of PHP source, I realized, that is_writable()
internally uses syscall access(2). In turn,  access(2) man page (on
Linux) says:

       The check is done with the calling process’s real UID and 
GID,  rather
       than  with  the  effective  IDs  as is done when actually
attempting an
       operation.  This is to allow set-user-ID programs to  easily 
determine
       the invoking user’s authority.


Reproduce code:
---------------
<?
$file = "testfile.txt";

echo "GetUID: " . posix_getuid() . "/" . posix_geteuid() . "<br />";
echo "file is writable " .  (is_writable($file)?"TRUE":"FALSE") . "<br
/>";

fopen("testfile.txt", 'wt');
echo ("file created");
?>


Expected result:
----------------
Expected result:

either: 
file is writable TRUE
file created

or
file is writable FALSE
ERROR



Actual result:
--------------
GetUID: 933/10099
file is writable FALSE
file created


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


-- 
Edit this bug report at http://bugs.php.net/?id=46498&edit=1

Reply via email to