Merge branch '1.0' into 2.0

This commit is contained in:
terrafrost 2021-11-03 22:16:57 -05:00
commit 9fb26d478a

View File

@ -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;
}
}