diff options
author | Robin Appelman <icewind@owncloud.com> | 2015-11-16 14:56:03 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2015-11-16 14:56:03 +0100 |
commit | 67710e62fa8cd5f875ee722766aeafdc72f3861e (patch) | |
tree | f03cb2bc3517069b2672c188511eefde11d92a6a /apps/files_external/lib | |
parent | 5e3d29b661e5fb8aa40943a6dec621e3343092f3 (diff) | |
download | nextcloud-server-67710e62fa8cd5f875ee722766aeafdc72f3861e.tar.gz nextcloud-server-67710e62fa8cd5f875ee722766aeafdc72f3861e.zip |
Fix parsing of sftp hosts when using ipv6
Diffstat (limited to 'apps/files_external/lib')
-rw-r--r-- | apps/files_external/lib/sftp.php | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index 5dcc7686ca3..f8651727fd2 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -52,27 +52,37 @@ class SFTP extends \OC\Files\Storage\Common { protected $client; /** + * @param string $host protocol://server:port + * @return array [$server, $port] + */ + private function splitHost($host) { + $input = $host; + if (strpos($host, '://') === false) { + // add a protocol to fix parse_url behavior with ipv6 + $host = 'http://' . $host; + } + + $parsed = parse_url($host); + if(is_array($parsed) && isset($parsed['port'])) { + return [$parsed['host'], $parsed['port']]; + } else if (is_array($parsed)) { + return [$parsed['host'], 22]; + } else { + return [$input, 22]; + } + } + + /** * {@inheritdoc} */ public function __construct($params) { // Register sftp:// Stream::register(); - $this->host = $params['host']; + $parsedHost = $this->splitHost($params['host']); - //deals with sftp://server example - $proto = strpos($this->host, '://'); - if ($proto != false) { - $this->host = substr($this->host, $proto+3); - } - - //deals with server:port - $hasPort = strpos($this->host,':'); - if($hasPort != false) { - $pieces = explode(":", $this->host); - $this->host = $pieces[0]; - $this->port = $pieces[1]; - } + $this->host = $parsedHost[0]; + $this->port = $parsedHost[1]; $this->user = $params['user']; |