#26224 [Fbk->Opn]: fileperms() inaccurately reports permissions
ID: 26224 User updated by: justin dot white at mci dot com Reported By: justin dot white at mci dot com -Status: Feedback +Status: Open Bug Type: Filesystem function related Operating System: Windows 2000 PHP Version: 4.3.3 New Comment: I think if you had read my post that you would have known that I understood what attributes DOS offered. However, we're not talking about DOS here. In Windows NT/2000/XP/2003, NTFS ACLs are completely ignored by PHP in determining the file properties. If libc does not provide a list of NTFS permissions, the list should be available through other means. That's a pretty important function for filesystem access. The only way to fix the problem is a change specifically for Win32 to use the GetSecurityInfo() call from Win32 API. Here's some information on it from MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/getsecurityinfo.asp Apparently, the Tcl-win folks have had the same problem in porting Tcl to Windows. Here's a discussion of their problems and possible solutions: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=749876&group_id=10894 Previous Comments: [2003-11-13 08:19:32] [EMAIL PROTECTED] You do realize that DOS only has a notion of a limited set of file attributes? (essentially, there is just a read-only flag). The "security tab" under windows displays the contents of the NTFS ACL; PHP just uses the functions provided by the MS libc, which seem to ignore the ACL. [2003-11-13 04:14:27] justin dot white at mci dot com Oops. It looks like my statement about 4.3.2 was incorrect. The system I was looking at had some files labeled as "Read Only" in the file properties, but the file security had no bearing on the result... Back to the drawing board. [2003-11-12 23:56:37] justin dot white at mci dot com I have been able to confirm that version 4.3.2 does not have this bug. I will be testing 4.3.4 shortly to see whether the bug has been resolved... [2003-11-12 13:24:05] justin dot white at mci dot com I also have a RH8 server with PHP 4.3.3 available and the sample code works flawlessly. [2003-11-12 13:23:13] justin dot white at mci dot com No, the result is the same. It appears that fileperms() and is_readable/is_writeable are all reading their permissions from file properties and not from filesystem permissions. Also, is_executable returned the following error: "Fatal error: Call to undefined function: is_executable()". I didn't see where a note was given about availability in Win32 train, so I don't what is up with that. Both is_readable() and is_writeable() were available, although incorrect. 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/26224 -- Edit this bug report at http://bugs.php.net/?id=26224&edit=1
#26224 [Fbk->Opn]: fileperms() inaccurately reports permissions
ID: 26224 User updated by: justin dot white at mci dot com Reported By: justin dot white at mci dot com -Status: Feedback +Status: Open Bug Type: Filesystem function related Operating System: Windows 2000 PHP Version: 4.3.3 New Comment: No, the result is the same. It appears that fileperms() and is_readable/is_writeable are all reading their permissions from file properties and not from filesystem permissions. Also, is_executable returned the following error: "Fatal error: Call to undefined function: is_executable()". I didn't see where a note was given about availability in Win32 train, so I don't what is up with that. Both is_readable() and is_writeable() were available, although incorrect. Previous Comments: [2003-11-12 13:08:10] [EMAIL PROTECTED] Does it work if you use the is_readable/is_writeable/is_executable functions instead of performing bitmask operations on the output of fileperms() ? [2003-11-12 13:06:04] justin dot white at mci dot com The server in the test setup uses NTFS in all filesystems. [2003-11-12 13:04:27] justin dot white at mci dot com Description: On Linux, PHP 4.3.3 correctly returns file permissions from the filesystem. With Windows 2000 and IIS, PHP in CGI or ISAPI mode does not. The reproduce code assumes that another file (TEST.PHP) already exists in the filesystem. Any other file or directory could be used (although the permissions are returned differently for directories). TEST.PHP can have any permissions, including explicitly DENY "Full Access" for EVERYONE group. Reproduce code: --- PERMS = '; $read = ($test & 0x0004) ? 'r' : '-'; $write = ($test & 0x0002) ? 'w' : '-'; $execute = ($test & 0x0001) ? 'x' : '-'; echo $read.$write.$execute.''; ?> Expected result: For files, returned results should be "PERMS = r--' if permissions were set to READ. Returned results should be "PERMS = rw-" if permissions were set to READ/WRITE or READ/WRITE/MODIFY. Returned results should be "PERMS = rwx" if permissions were set to READ/EXECUTE/WRITE or READ/EXECUTE/WRITE/MODIFY or FULL CONTROL. For directories, returned result should be similar (although permissions on directory are more well-defined). Actual result: -- For files, returned results will always be "PERMS = rw-'; For directories, returned result will always be "PERMS = rwx'; Even attempting this operation on "C:/pagefile.sys" returned "PERMS = rw-". Curiously, when marking the file as "read-only" in the file properties (not security tab), the returned results are "PERMS = r--" for files and "PERMS = r-x" for directories. -- Edit this bug report at http://bugs.php.net/?id=26224&edit=1