diff options
| author | Andreas Fischer <bantu@phpbb.com> | 2012-01-02 18:53:55 +0100 | 
|---|---|---|
| committer | Andreas Fischer <bantu@phpbb.com> | 2012-01-02 18:53:55 +0100 | 
| commit | 2345be38b682a58f9b5e5429c76db97a0564093d (patch) | |
| tree | fe39c5f348f86c23f3c9af9011d6d0c1b0c0baf5 /phpBB/includes/functions_transfer.php | |
| parent | c8da5ad9f42d8ced1aead79a42cc5caee5c5a2ff (diff) | |
| parent | e14c3f3b77ab07ce97f357a15db5db5101df06c1 (diff) | |
| download | forums-2345be38b682a58f9b5e5429c76db97a0564093d.tar forums-2345be38b682a58f9b5e5429c76db97a0564093d.tar.gz forums-2345be38b682a58f9b5e5429c76db97a0564093d.tar.bz2 forums-2345be38b682a58f9b5e5429c76db97a0564093d.tar.xz forums-2345be38b682a58f9b5e5429c76db97a0564093d.zip  | |
Merge branch 'prep-release-3.0.10'
* prep-release-3.0.10: (221 commits)
  [prep-release-3.0.10] Bumping version number for 3.0.10 final.
  [prep-release-3.0.10] Update Changelog for 3.0.10-RC3 release.
  [ticket/10531] Disallow deleting of the last style
  [ticket/8996] Revert initial fix to keep old behaviour on empty selection Part2
  [ticket/8996] Revert initial fix to keep old behaviour on empty selection
  [ticket/10319] Missing hidden fields in search form
  [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-6632
  [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-10408
  [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-10485
  [prep-release-3.0.10] Bumping version number for 3.0.10-RC3.
  [ticket/10480] Add a build target for changelog building.
  [ticket/10480] Add a build script for exporting the changelog from tracker.
  [ticket/10502] Fix typo in changelog. 'red' should have been 'read'.
  [prep-release-3.0.10] Remove duplicate ticket PHPBB3-10490 from changelog.
  [ticket/10501] Fix description of table prefixes
  [ticket/10503] Debug error "Invalid arguments" when previewing edits
  [prep-release-3.0.10] Update Changelog for 3.0.10-RC2 release.
  [ticket/10497] Fix SQL error when guest visits forum with unread topic
  [prep-release-3.0.10] Bumping version number for 3.0.10-RC2.
  [ticket/10461] Add a comment explaining the logic here.
  ...
Diffstat (limited to 'phpBB/includes/functions_transfer.php')
| -rw-r--r-- | phpBB/includes/functions_transfer.php | 55 | 
1 files changed, 44 insertions, 11 deletions
diff --git a/phpBB/includes/functions_transfer.php b/phpBB/includes/functions_transfer.php index 046abede8e..5ab7a87efd 100644 --- a/phpBB/includes/functions_transfer.php +++ b/phpBB/includes/functions_transfer.php @@ -808,23 +808,56 @@ class ftp_fsock extends transfer  	*/  	function _open_data_connection()  	{ -		$this->_send_command('PASV', '', false); - -		if (!$ip_port = $this->_check_command(true)) +		// Try to find out whether we have a IPv4 or IPv6 (control) connection +		if (function_exists('stream_socket_get_name'))  		{ -			return false; +			$socket_name = stream_socket_get_name($this->connection, true); +			$server_ip = substr($socket_name, 0, strrpos($socket_name, ':'));  		} -		// open the connection to start sending the file -		if (!preg_match('#[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+#', $ip_port, $temp)) +		if (!isset($server_ip) || preg_match(get_preg_expression('ipv4'), $server_ip))  		{ -			// bad ip and port -			return false; +			// Passive mode +			$this->_send_command('PASV', '', false); + +			if (!$ip_port = $this->_check_command(true)) +			{ +				return false; +			} + +			// open the connection to start sending the file +			if (!preg_match('#[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+#', $ip_port, $temp)) +			{ +				// bad ip and port +				return false; +			} + +			$temp = explode(',', $temp[0]); +			$server_ip = $temp[0] . '.' . $temp[1] . '.' . $temp[2] . '.' . $temp[3]; +			$server_port = $temp[4] * 256 + $temp[5]; +		} +		else +		{ +			// Extended Passive Mode - RFC2428 +			$this->_send_command('EPSV', '', false); + +			if (!$epsv_response = $this->_check_command(true)) +			{ +				return false; +			} + +			// Response looks like "229 Entering Extended Passive Mode (|||12345|)" +			// where 12345 is the tcp port for the data connection +			if (!preg_match('#\(\|\|\|([0-9]+)\|\)#', $epsv_response, $match)) +			{ +				return false; +			} +			$server_port = (int) $match[1]; + +			// fsockopen expects IPv6 address in square brackets +			$server_ip = "[$server_ip]";  		} -		$temp = explode(',', $temp[0]); -		$server_ip = $temp[0] . '.' . $temp[1] . '.' . $temp[2] . '.' . $temp[3]; -		$server_port = $temp[4] * 256 + $temp[5];  		$errno = 0;  		$errstr = '';  | 
