ID: 41822
Comment by: ab5602 at wayne dot edu
Reported By: ian at onlineloop dot com
Status: Assigned
Bug Type: *Directory/Filesystem functions
Operating System: Solaris 10
PHP Version: 5.2CVS-20070627
Assigned To: tony2001
New Comment:
I created the following patch which fixes the problem, however it still
needs discussion as to if it is a good way to implement this fix. At
least it can serve as a starting point. One concern was if this should
be implemented at a lower level (TSRM code).
--- ./plain_wrapper.c.old 2007-10-05 02:50:59.000000000 -0400
+++ ./plain_wrapper.c 2007-10-05 02:55:38.000000000 -0400
@@ -885,9 +885,20 @@
return NULL;
}
- if ((realpath = expand_filepath(filename, NULL TSRMLS_CC)) ==
NULL) {
- return NULL;
- }
+ if ((realpath = expand_filepath(filename, NULL TSRMLS_CC)) ==
NULL)
+ {
+ if (options & STREAM_OPEN_FOR_INCLUDE) {
+ /* Attempt to open without path expansion
anyways.
+ Files in Solaris dirs with --x will
+ not return a realpath, but are accessible
*/
+ fd = open(filename, open_flags, 0666);
+ if (fd != -1) {
+ ret =
php_stream_fopen_from_fd_int_rel(fd, mode, persistent_id);
+ return ret; }
+ else {
+ return NULL; }
+ }
+ }
if (persistent) {
spprintf(&persistent_id, 0, "streams_stdio_%d_%s",
open_flags, realpath);
Previous Comments:
------------------------------------------------------------------------
[2007-10-05 11:58:09] jh at webteam dot at
Could reproduce this bug under Mac OS X 10.4.10 and PHP 5.2.4 (via
MacPorts).
------------------------------------------------------------------------
[2007-10-05 03:29:44] ab5602 at wayne dot edu
No, the above NFS issues is a side-effect of:
1) Solaris getcwd() not functioning properly with (--x) directories
and
2) PHP not properly allowing relative include()'s when #1 is the case
#2 is probably solvable w/ a bug fix, #1 is obviously not.
------------------------------------------------------------------------
[2007-10-02 11:11:49] [EMAIL PROTECTED]
So this is only an issue with NFS shares? If so, please indicate that
in the summary.
------------------------------------------------------------------------
[2007-10-02 06:54:42] ab5602 at wayne dot edu
I figured out what the issue was with the NFS shares and the
"permission denied error" in our Solaris environment. It was related to
the same (--x) permission issue that you are having.
As it turns out, if you mount an NFS share in:
/mylocaldir/nfsmount/
The /nfsmount/ directory permissions, *before* you mount the share,
need to be (r-x) or better, even though these permissions are hidden
after the mount in order to avoid the Solaris+PHP include() bug. Now
include() and getcwd() work just fine!
It is very clear that this all goes back to two options:
1) Either make all the subdirs underneath (r-x)
OR
2) If it is possible (which I'm not yet sure of), the PHP binary needs
to "tell" Solaris that it already knows the current path by doing a
chdir(/absolute/path/) or the like before trying getcwd() in order to
make the "include() cause permission denied error" go away.
------------------------------------------------------------------------
[2007-10-01 23:53:16] ab5602 at wayne dot edu
correction: a) Execute a program that implements getcwd() that is
suid-root.
------------------------------------------------------------------------
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/41822
--
Edit this bug report at http://bugs.php.net/?id=41822&edit=1