php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #50159 wrong working directory in symlinked files
Submitted: 2009-11-12 15:39 UTC Modified: 2009-11-30 14:26 UTC
Votes:3
Avg. Score:4.3 ± 0.9
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:1 (50.0%)
From: cweiske@php.net Assigned: dmitry (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 5.3.1RC3 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: cweiske@php.net
New email:
PHP Version: OS:

 

 [2009-11-12 15:39 UTC] cweiske@php.net
Description:
------------
getcwd() and the current working directory does not work correctly anymore on php 5.3.0 and 5.3.1RCx when executing a symlinked file.

In php versions before 5.3.0, the current working directory of a file was the directory below the document root of the web server. in 5.3.0, it's the target directory of the symlinked file.

Imagine the following file layout:
/var/www/host/ - webserver document root
/var/www/host/config.php
/var/www/host/index.php - symlink to /usr/share/app/index.php

When opening index.php, getcwd() returns /usr/share/app/ in 5.3.0 and 5.3.1rc(1|2|3), while it returned /var/www/host/ on 5.2.x.

This change causes real problems because now it is impossible to share application code easily among installations!


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-11-12 16:24 UTC] pajoye@php.net
Related to #49456. Which is expected given the changes applied to realpath and related functions.
 [2009-11-12 16:43 UTC] jani@php.net
See also bug #49456

 [2009-11-12 16:44 UTC] cweiske@php.net
sapi is fastcgi
 [2009-11-12 16:44 UTC] jani@php.net
See also bug #46814 (reported for 5.2.8 actually..)
 [2009-11-12 17:02 UTC] jani@php.net
Dmitry, I think this patch of yours caused this:

http://svn.php.net/viewvc?view=revision&revision=263055

Any comments?
 [2009-11-12 22:24 UTC] cweiske@php.net
I reverted
<@Jani_> svn diff -r263054:263055
with patch -R, but that did not help. I still get the symlink directory reported when running <?php echo getcwd(); ?>
 [2009-11-13 08:36 UTC] jani@php.net
So no need to ask Dmitry then. :)
 [2009-11-18 09:46 UTC] srinatar@php.net
hi,
 in my quick investigation, i think the issue is we are doing chdir to 
the absolute path of given uri (which is a change in behavior compared 
to 5.2).

here is a rough draft like patch that seems to alleviate this problem.

[sriramn@tim-vm2]'PHP_5_3'>svn diff main/fopen_wrappers.c 
Index: main/fopen_wrappers.c
===================================================================
--- main/fopen_wrappers.c       (revision 290898)
+++ main/fopen_wrappers.c       (working copy)
@@ -386,7 +386,7 @@
 #ifndef PHP_WIN32
        struct stat st;
 #endif
-       char *path_info, *filename;
+       char *path_info, *filename, *orig_filename;
        int length;
 
        filename = SG(request_info).path_translated;
@@ -455,6 +455,7 @@
        } /* if doc_root && path_info */
 
        if (filename) {
+               orig_filename = estrdup(filename);
                filename = zend_resolve_path(filename, 
strlen(filename) TSRMLS_CC);
        }
 
@@ -488,8 +489,15 @@
        STR_FREE(SG(request_info).path_translated);     /* for same 
reason as above */
        SG(request_info).path_translated = filename;
 
-       file_handle->filename = SG(request_info).path_translated;
-       file_handle->free_filename = 0;
+       if (orig_filename) {
+               file_handle->filename = orig_filename;
+               file_handle->free_filename = 1;
+       }
+       else {
+               file_handle->filename = 
SG(request_info).path_translated;
+               file_handle->free_filename = 0;
+       }
+
        file_handle->handle.fp = fp;
        file_handle->type = ZEND_HANDLE_FP;
 

applying this patch , seems to work. af course, more thought need to 
go on this before this can be committed. 



 [2009-11-22 17:58 UTC] cweiske@php.net
@srinatar@php.net:
Applying that patch to 5.3.1 fixes the problem for me!
 [2009-11-30 14:21 UTC] svn@php.net
Automatic comment from SVN on behalf of dmitry
Revision: http://svn.php.net/viewvc/?view=revision&revision=291496
Log: Fixed bug #50159 (wrong working directory in symlinked files)
 [2009-11-30 14:21 UTC] dmitry@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2009-11-30 14:26 UTC] cweiske@php.net
Thanks!
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Dec 03 17:01:29 2024 UTC