KeyboardInteractive Fix

1. Snip out some extraneous states from the server handshake tracking
   for accept.
2. Change sending the keyboard interactive info response to a reaction
   to a request.
pull/801/head
John Safranek 2025-05-05 14:12:21 -07:00
parent 24b7629d78
commit 56189a3775
3 changed files with 4 additions and 38 deletions

View File

@ -7913,12 +7913,7 @@ static int DoUserAuthSuccess(WOLFSSH* ssh,
return ret;
}
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
if (ssh->serverState == SERVER_USERAUTH_ACCEPT_KEYBOARD)
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE;
else
#endif
ssh->serverState = SERVER_USERAUTH_ACCEPT_DONE;
ssh->serverState = SERVER_USERAUTH_ACCEPT_DONE;
WLOG(WS_LOG_DEBUG, "Leaving DoUserAuthSuccess(), ret = %d", ret);
return ret;
@ -7971,7 +7966,6 @@ static int DoUserAuthInfoRequest(WOLFSSH* ssh, byte* buf, word32 len,
if (ssh == NULL || buf == NULL || len == 0 || idx == NULL)
ret = WS_BAD_ARGUMENT;
if (ret == WS_SUCCESS) {
begin = *idx;
ret = GetStringAlloc(ssh->ctx->heap, (char**)&authName, buf, len,
@ -8046,8 +8040,9 @@ static int DoUserAuthInfoRequest(WOLFSSH* ssh, byte* buf, word32 len,
WFREE(language, ssh->ctx->heap, DYNTYPE_STRING);
}
if (ret == WS_SUCCESS)
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD;
if (ret == WS_SUCCESS) {
ret = SendUserAuthKeyboardResponse(ssh);
}
WLOG(WS_LOG_DEBUG, "Leaving DoUserAuthInfoRequest(), ret = %d", ret);

View File

@ -890,30 +890,6 @@ int wolfSSH_connect(WOLFSSH* ssh)
return WS_FATAL_ERROR;
}
}
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
while (ssh->serverState == SERVER_USERAUTH_ACCEPT_KEYBOARD) {
if ( (ssh->error = SendUserAuthKeyboardResponse(ssh)) <
WS_SUCCESS) {
WLOG(WS_LOG_DEBUG, connectError, "CLIENT_USERAUTH_SENT",
ssh->error);
return WS_FATAL_ERROR;
}
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD_NEXT;
while (
(ssh->serverState < SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE) &&
(ssh->serverState != SERVER_USERAUTH_ACCEPT_KEYBOARD) &&
(ssh->serverState != SERVER_USERAUTH_ACCEPT_DONE)) {
if (DoReceive(ssh) < WS_SUCCESS) {
WLOG(WS_LOG_DEBUG, connectError,
"CLIENT_USERAUTH_SENT", ssh->error);
return WS_FATAL_ERROR;
}
}
}
#endif
ssh->connectState = CONNECT_SERVER_USERAUTH_ACCEPT_DONE;
WLOG(WS_LOG_DEBUG, connectState, "SERVER_USERAUTH_ACCEPT_DONE");
NO_BREAK;

View File

@ -1164,11 +1164,6 @@ enum ServerStates {
SERVER_KEXINIT_DONE,
SERVER_USERAUTH_REQUEST_DONE,
SERVER_USERAUTH_ACCEPT_DONE,
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
SERVER_USERAUTH_ACCEPT_KEYBOARD,
SERVER_USERAUTH_ACCEPT_KEYBOARD_NEXT,
SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE,
#endif
SERVER_CHANNEL_OPEN_DONE,
SERVER_DONE
};