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
9fb26d478a
@ -1044,6 +1044,14 @@ class SSH2
|
||||
*/
|
||||
var $regenerate_decompression_context = false;
|
||||
|
||||
/**
|
||||
* Smart multi-factor authentication flag
|
||||
*
|
||||
* @var bool
|
||||
* @access private
|
||||
*/
|
||||
var $smartMFA = true;
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
*
|
||||
@ -2248,9 +2256,57 @@ class SSH2
|
||||
return $this->_login_helper($username);
|
||||
}
|
||||
|
||||
foreach ($args as $arg) {
|
||||
if ($this->_login_helper($username, $arg)) {
|
||||
return true;
|
||||
while (count($args)) {
|
||||
if (!$this->auth_methods_to_continue || !$this->smartMFA) {
|
||||
$newargs = $args;
|
||||
$args = array();
|
||||
} else {
|
||||
$newargs = array();
|
||||
foreach ($this->auth_methods_to_continue as $method) {
|
||||
switch ($method) {
|
||||
case 'publickey':
|
||||
foreach ($args as $key => $arg) {
|
||||
if (is_object($arg)) {
|
||||
$newargs[] = $arg;
|
||||
unset($args[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'keyboard-interactive':
|
||||
$hasArray = $hasString = false;
|
||||
foreach ($args as $arg) {
|
||||
if ($hasArray || is_array($arg)) {
|
||||
$hasArray = true;
|
||||
break;
|
||||
}
|
||||
if ($hasString || is_string($arg)) {
|
||||
$hasString = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($hasArray && $hasString) {
|
||||
foreach ($args as $key => $arg) {
|
||||
if (is_array($arg)) {
|
||||
$newargs[] = $arg;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
case 'password':
|
||||
foreach ($args as $key => $arg) {
|
||||
$newargs[] = $arg;
|
||||
unset($args[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($newargs as $arg) {
|
||||
if ($this->_login_helper($username, $arg)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -5311,4 +5367,20 @@ class SSH2
|
||||
{
|
||||
return $this->auth_methods_to_continue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables "smart" multi-factor authentication (MFA)
|
||||
*/
|
||||
function enableSmartMFA()
|
||||
{
|
||||
$this->smartMFA = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables "smart" multi-factor authentication (MFA)
|
||||
*/
|
||||
function disableSmartMFA()
|
||||
{
|
||||
$this->smartMFA = false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user