mirror of https://github.com/wolfSSL/wolfssh.git
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
parent
24b7629d78
commit
56189a3775
|
@ -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);
|
||||
|
||||
|
|
24
src/ssh.c
24
src/ssh.c
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue