mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-05 21:17:53 +00:00
Merge branch '1.0' into 2.0
This commit is contained in:
commit
f1b0708446
@ -970,6 +970,14 @@ class SSH2
|
||||
*/
|
||||
var $auth = array();
|
||||
|
||||
/**
|
||||
* The authentication methods that may productively continue authentication.
|
||||
*
|
||||
* @see https://tools.ietf.org/html/rfc4252#section-5.1
|
||||
* @var array|null
|
||||
*/
|
||||
private $auth_methods_to_continue = null;
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
*
|
||||
@ -2131,7 +2139,7 @@ class SSH2
|
||||
|
||||
// try logging with 'none' as an authentication method first since that's what
|
||||
// PuTTY does
|
||||
if (substr($this->server_identifier, 0, 13) != 'SSH-2.0-CoreFTP') {
|
||||
if (substr($this->server_identifier, 0, 13) != 'SSH-2.0-CoreFTP' && $this->auth_methods_to_continue === null) {
|
||||
if ($this->_login($username)) {
|
||||
return true;
|
||||
}
|
||||
@ -2275,7 +2283,9 @@ class SSH2
|
||||
case NET_SSH2_MSG_USERAUTH_SUCCESS:
|
||||
$this->bitmap |= self::MASK_LOGIN;
|
||||
return true;
|
||||
//case NET_SSH2_MSG_USERAUTH_FAILURE:
|
||||
case NET_SSH2_MSG_USERAUTH_FAILURE:
|
||||
extract(unpack('Nmethodlistlen', $this->_string_shift($response, 4)));
|
||||
$this->auth_methods_to_continue = explode(',', $this->_string_shift($response, $methodlistlen));
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@ -2347,6 +2357,7 @@ class SSH2
|
||||
}
|
||||
extract(unpack('Nlength', $this->_string_shift($response, 4)));
|
||||
$auth_methods = explode(',', $this->_string_shift($response, $length));
|
||||
$this->auth_methods_to_continue = $auth_methods;
|
||||
if (!strlen($response)) {
|
||||
return false;
|
||||
}
|
||||
@ -2519,6 +2530,8 @@ class SSH2
|
||||
case NET_SSH2_MSG_USERAUTH_SUCCESS:
|
||||
return true;
|
||||
case NET_SSH2_MSG_USERAUTH_FAILURE:
|
||||
extract(unpack('Nmethodlistlen', $this->_string_shift($response, 4)));
|
||||
$this->auth_methods_to_continue = explode(',', $this->_string_shift($response, $methodlistlen));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -2627,8 +2640,9 @@ class SSH2
|
||||
if (strlen($response) < 4) {
|
||||
return false;
|
||||
}
|
||||
extract(unpack('Nlength', $this->_string_shift($response, 4)));
|
||||
$this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length);
|
||||
extract(unpack('Nmethodlistlen', $this->_string_shift($response, 4)));
|
||||
$this->auth_methods_to_continue = explode(',', $this->_string_shift($response, $methodlistlen));
|
||||
$this->errors[] = 'SSH_MSG_USERAUTH_FAILURE';
|
||||
return false;
|
||||
case NET_SSH2_MSG_USERAUTH_PK_OK:
|
||||
// we'll just take it on faith that the public key blob and the public key algorithm name are as
|
||||
@ -2669,6 +2683,8 @@ class SSH2
|
||||
switch ($type) {
|
||||
case NET_SSH2_MSG_USERAUTH_FAILURE:
|
||||
// either the login is bad or the server employs multi-factor authentication
|
||||
extract(unpack('Nmethodlistlen', $this->_string_shift($response, 4)));
|
||||
$this->auth_methods_to_continue = explode(',', $this->_string_shift($response, $methodlistlen));
|
||||
return false;
|
||||
case NET_SSH2_MSG_USERAUTH_SUCCESS:
|
||||
$this->bitmap |= self::MASK_LOGIN;
|
||||
@ -5143,4 +5159,15 @@ class SSH2
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of authentication methods that may productively continue authentication.
|
||||
*
|
||||
* @see https://tools.ietf.org/html/rfc4252#section-5.1
|
||||
* @return array|null
|
||||
*/
|
||||
public function getAuthMethodsToContinue()
|
||||
{
|
||||
return $this->auth_methods_to_continue;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user