ID: 49620 Updated by: paj...@php.net Reported By: philipp at servicemail24 dot de -Status: Open +Status: Assigned Bug Type: *Directory/Filesystem functions Operating System: win32 only - Windows XP SP2 PHP Version: 5.3.0 Assigned To: pajoye New Comment:
hi, Thanks for testing :) I can reproduce the problem with 2k3. One of the ACL problem is that the SID may not match (even if the usernames are the same). The problem goes away as long as there are domain users and not users per machine. A working example is to have a share on windows XP, with full control to everyone or read only. In both cases is_readable or is_writable will return the correct results. However it is not certain that I can restore 5.2's behavior. 5.2 was using (_)access, which did not do any kind of ACL checks and miserably fails for 90% of the cases. Its guest was luckily working for remote shares, but that's not guaranteed to work in every situation. 5.3 and later actually relies on AccessCheck API to do real ACL checks. I'm setting up some more test VMs to try to find a solution. Thanks again for testing, that's very helpful. Previous Comments: ------------------------------------------------------------------------ [2009-09-23 09:27:17] philipp at servicemail24 dot de ok cmd.exe using runas produces the same results. testuser is a local user account on each system with the same password. All clients / servers are in the same domain. Clients are Windows XP SP2 GERMAN x86 Windows XP SP3 GERMAN x86 Tested Servers are Windows 2003 SP2 ENGLISH x64 - is_readable is working here - Share Permissions test user full control - Folder ACL test user full control Windows 2003 SP2 ENGLISH x86 - neither is_readable nor is_writeable is working here - Share Permissions testuser full control - Folder ACL testuser full control Open-E DSS Server (samba) - everything is fine ------------------------------------------------------------------------ [2009-09-23 08:44:20] paj...@php.net Please also tell me which windows you use as server and client. ------------------------------------------------------------------------ [2009-09-23 08:20:19] paj...@php.net I'm not sure to see what's the difference with your config. Questions: - How did you configure the share (permissions) on 10.1.1.1 - is it a different host than the test machine? - Pls simply try using runas, I have no idea what runaspc does internally :). Or simply login using testuser ------------------------------------------------------------------------ [2009-09-23 08:10:35] philipp at servicemail24 dot de I extended my test script with further file sys related functions: if(@!is_dir($folder)) { echo('FAILED is_dir: ' . $folder . "\n"); } else { echo "OK is_dir: " . $folder . "\n"; } if ($dh = @opendir($folder)) { closedir($dh); echo "OK opendir: " . $folder . "\n"; } else { echo('FAILED opendir: ' . $folder . "\n"); } if(@!is_readable($folder)) { echo('FAILED is_readable: ' . $folder . "\n"); } else { echo "OK is_readable: " . $folder . "\n"; } if(@!is_writeable($folder)) { echo('FAILED is_writeable: ' . $folder . "\n"); } else { echo "OK is_writeable: " . $folder . "\n"; } $filename = $folder . '\\test_' . time() . '.txt'; $content = 'php test ' . time(); if(@!file_put_contents($filename, $content)) { echo('FAILED file_put_contents: ' . $filename . "\n"); } else { echo "OK file_put_contents: " . $filename . "\n"; } if(@!is_readable($filename)) { echo('FAILED is_readable: ' . $filename . "\n"); } else { echo "OK is_readable: " . $filename . "\n"; } if(@!is_writeable($filename)) { echo('FAILED is_writeable: ' . $filename . "\n"); } else { echo "OK is_writeable: " . $filename . "\n"; } if(@!file_get_contents($filename) == $content) { echo('FAILED file_get_contents: ' . $filename . "\n"); } else { echo "OK file_get_contents: " . $filename . "\n"; } if(@!unlink($filename)) { echo('FAILED unlink: ' . $filename . "\n"); } else { echo "OK unlink: " . $filename . "\n"; } all functions are fine expect is_readable and is_writeable: 5.3.x result: OK is_dir: \\10.1.1.1\share OK opendir: \\10.1.1.1\share FAILED is_readable: \\10.1.1.1\share FAILED is_writeable: \\10.1.1.1\share OK file_put_contents: \\10.1.1.1\share\test_1253693124.txt FAILED is_readable: \\10.1.1.1\share\test_1253693124.txt FAILED is_writeable: \\10.1.1.1\share\test_1253693124.txt OK file_get_contents: \\10.1.1.1\share\test_1253693124.txt OK unlink: \\10.1.1.1\share\test_1253693124.txt OK is_dir: \\srv\share OK opendir: \\srv\share FAILED is_readable: \\srv\share FAILED is_writeable: \\srv\share OK file_put_contents: \\srv\share\test_1253693124.txt FAILED is_readable: \\srv\share\test_1253693124.txt FAILED is_writeable: \\srv\share\test_1253693124.txt OK file_get_contents: \\srv\share\test_1253693124.txt OK unlink: \\srv\share\test_1253693124.txt 5.2.x result: OK is_dir: \\10.1.1.1\share OK opendir: \\10.1.1.1\share OK is_readable: \\10.1.1.1\share OK is_writeable: \\10.1.1.1\share OK file_put_contents: \\10.1.1.1\share\test_1253693124.txt OK is_readable: \\10.1.1.1\share\test_1253693124.txt OK is_writeable: \\10.1.1.1\share\test_1253693124.txt OK file_get_contents: \\10.1.1.1\share\test_1253693124.txt OK unlink: \\10.1.1.1\share\test_1253693124.txt OK is_dir: \\srv\share OK opendir: \\srv\share OK is_readable: \\srv\share OK is_writeable: \\srv\share OK file_put_contents: \\srv\share\test_1253693124.txt OK is_readable: \\srv\share\test_1253693124.txt OK is_writeable: \\srv\share\test_1253693124.txt OK file_get_contents: \\srv\share\test_1253693124.txt OK unlink: \\srv\share\test_1253693124.txt ------------------------------------------------------------------------ [2009-09-23 07:30:12] philipp at servicemail24 dot de php-5.3.2-dev-nts-Win32-VC9-x86-200909221530.zip does not help either. The problem does not occur using samba servers. But it occurs with all windows severs I have. I am logged in at my workstation using my normal user account with admin rights. Then I use RUNASSPC to get a cmd shell. http://www.robotronic.de/runasspcEn.html This is my batch file: rem @ECHO OFF REM = = = = = MODIFY HERE TO FIT TO YOUR PATH = = = = SET TESTUNITPATH=D:\php\ SET TESTUNITCOMMAND=c:\php\5.3.2\php.exe test.php SET ELSDOMAIN=localhost SET ELSUSERNAME=testuser SET ELSPASSWORD=testpassword REM = = = = = DO NOT EDIT BELOW = = = = = = = = = = = runasspc.exe /program:"%systemroot%\system32\cmd.exe" /param:"/k %TESTUNITCOMMAND%" /executein:"%TESTUNITPATH%" /domain:"%ELSDOMAIN%" /user:"%ELSUSERNAME%" /password:"%ELSPASSWORD%" ------------------------------------------------------------------------ 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/49620 -- Edit this bug report at http://bugs.php.net/?id=49620&edit=1