From 41b5f7cfe98f014936530e13df75aacea5e1361b Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 29 Aug 2021 13:11:26 -0500 Subject: [PATCH] tweak version management stuff --- phpseclib/Net/SFTP.php | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/phpseclib/Net/SFTP.php b/phpseclib/Net/SFTP.php index 9a95042f..4afe1967 100644 --- a/phpseclib/Net/SFTP.php +++ b/phpseclib/Net/SFTP.php @@ -196,6 +196,15 @@ class Net_SFTP extends Net_SSH2 */ var $version; + /** + * Default Server SFTP version + * + * @var int + * @see self::_initChannel() + * @access private + */ + var $defaultVersion; + /** * Current working directory * @@ -609,7 +618,7 @@ class Net_SFTP extends Net_SSH2 return false; } extract(unpack('Nversion', $this->_string_shift($response, 4))); - $this->version = $version; + $this->defaultVersion = $version; while (!empty($response)) { if (strlen($response) < 4) { return false; @@ -664,11 +673,12 @@ class Net_SFTP extends Net_SSH2 in draft-ietf-secsh-filexfer-13 would be quite impossible. As such, what Net_SFTP would do is close the channel and reopen it with a new and updated SSH_FXP_INIT packet. */ + $this->version = $this->defaultVersion; if (isset($this->extensions['versions']) && (!$this->preferredVersion || $this->preferredVersion != $this->version)) { $versions = explode(',', $this->extensions['versions']); $supported = array(6, 5, 4); if ($this->preferredVersion) { - $supported = array_diff($supported, [$this->preferredVersion]); + $supported = array_diff($supported, array($this->preferredVersion)); array_unshift($supported, $this->preferredVersion); } foreach ($supported as $ver) { @@ -3624,13 +3634,28 @@ SFTP v6 changes (from v5) $this->_partial_init_sftp_connection(); } - $temp = array('version' => $this->version); + $temp = array('version' => $this->defaultVersion); if (isset($this->extensions['versions'])) { $temp['extensions'] = $this->extensions['versions']; } return $temp; } + /** + * Get supported SFTP versions + * + * @return array + * @access public + */ + function getNegotiatedVersion() + { + if (!$this->_precheck()) { + return false; + } + + return $this->version; + } + /** * Set preferred version *