Skip to content

Commit

Permalink
- open_basedir symlink support for Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
pierrejoye committed Sep 10, 2010
1 parent 2b04364 commit 77d307c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 12 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -10,6 +10,7 @@
(Andrey)
- Improved support for is_link and related functions on Windows. (Pierre)

- Implemented symbolic links support for open_basedir checks. (Pierre)
- Implemented FR #51804, SplFileInfo::getLinkTarget on Windows. (Pierre)

- Fixed symbolic resolution support when the target is a DFS share. (Pierre)
Expand Down
8 changes: 8 additions & 0 deletions UPGRADING
Expand Up @@ -457,6 +457,14 @@ UPGRADE NOTES - PHP 5.3
- Firebird and SNMP support are no longer available on Windows. Firebird support
may be reintroduced in the future.

=====================
11.1 New in PHP 5.3.4
=====================

- open_basedir supports now symbolic links (checks the target).
- is_link and SplFileInfo symbolic links related method are now fully supported
(on Windows Vista or later).

===================
12. New in PHP 5.3:
===================
Expand Down
30 changes: 18 additions & 12 deletions main/fopen_wrappers.c
Expand Up @@ -173,21 +173,27 @@ PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path
memcpy(path_tmp, resolved_name, path_len + 1); /* safe */

while (VCWD_REALPATH(path_tmp, resolved_name) == NULL) {
#ifdef HAVE_SYMLINK
if (nesting_level == 0) {
int ret;
char buf[MAXPATHLEN];

ret = readlink(path_tmp, buf, MAXPATHLEN - 1);
if (ret < 0) {
/* not a broken symlink, move along.. */
} else {
/* put the real path into the path buffer */
memcpy(path_tmp, buf, ret);
path_tmp[ret] = '\0';
#if defined(PHP_WIN32) || defined(HAVE_SYMLINK)
#if defined(PHP_WIN32)
if (EG(windows_version_info).dwMajorVersion > 5) {
#endif
if (nesting_level == 0) {
int ret;
char buf[MAXPATHLEN];

ret = php_sys_readlink(path_tmp, buf, MAXPATHLEN - 1);
if (ret < 0) {
/* not a broken symlink, move along.. */
} else {
/* put the real path into the path buffer */
memcpy(path_tmp, buf, ret);
path_tmp[ret] = '\0';
}
}
#if defined(PHP_WIN32)
}
#endif
#endif

#if defined(PHP_WIN32) || defined(NETWARE)
path_file = strrchr(path_tmp, DEFAULT_SLASH);
Expand Down

0 comments on commit 77d307c

Please sign in to comment.