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

Reply via email to