Skip to content

Commit a7eb9b1

Browse files
committed
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.
1 parent b84b958 commit a7eb9b1

File tree

3 files changed

+4
-32
lines changed

3 files changed

+4
-32
lines changed

src/internal.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7898,10 +7898,7 @@ static int DoUserAuthSuccess(WOLFSSH* ssh,
78987898
return ret;
78997899
}
79007900

7901-
if (ssh->serverState == SERVER_USERAUTH_ACCEPT_KEYBOARD)
7902-
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE;
7903-
else
7904-
ssh->serverState = SERVER_USERAUTH_ACCEPT_DONE;
7901+
ssh->serverState = SERVER_USERAUTH_ACCEPT_DONE;
79057902

79067903
WLOG(WS_LOG_DEBUG, "Leaving DoUserAuthSuccess(), ret = %d", ret);
79077904
return ret;
@@ -7954,7 +7951,6 @@ static int DoUserAuthInfoRequest(WOLFSSH* ssh, byte* buf, word32 len,
79547951
if (ssh == NULL || buf == NULL || len == 0 || idx == NULL)
79557952
ret = WS_BAD_ARGUMENT;
79567953

7957-
79587954
if (ret == WS_SUCCESS) {
79597955
begin = *idx;
79607956
ret = GetStringAlloc(ssh->ctx->heap, (char**)&authName, buf, len,
@@ -8029,8 +8025,9 @@ static int DoUserAuthInfoRequest(WOLFSSH* ssh, byte* buf, word32 len,
80298025
WFREE(language, ssh->ctx->heap, DYNTYPE_STRING);
80308026
}
80318027

8032-
if (ret == WS_SUCCESS)
8033-
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD;
8028+
if (ret == WS_SUCCESS) {
8029+
ret = SendUserAuthKeyboardResponse(ssh);
8030+
}
80348031

80358032
WLOG(WS_LOG_DEBUG, "Leaving DoUserAuthInfoRequest(), ret = %d", ret);
80368033

src/ssh.c

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -890,28 +890,6 @@ int wolfSSH_connect(WOLFSSH* ssh)
890890
return WS_FATAL_ERROR;
891891
}
892892
}
893-
894-
while (ssh->serverState == SERVER_USERAUTH_ACCEPT_KEYBOARD) {
895-
if ( (ssh->error = SendUserAuthKeyboardResponse(ssh)) <
896-
WS_SUCCESS) {
897-
WLOG(WS_LOG_DEBUG, connectError, "CLIENT_USERAUTH_SENT",
898-
ssh->error);
899-
return WS_FATAL_ERROR;
900-
}
901-
ssh->serverState = SERVER_USERAUTH_ACCEPT_KEYBOARD_NEXT;
902-
while (
903-
(ssh->serverState < SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE) &&
904-
(ssh->serverState != SERVER_USERAUTH_ACCEPT_KEYBOARD) &&
905-
(ssh->serverState != SERVER_USERAUTH_ACCEPT_DONE)) {
906-
907-
if (DoReceive(ssh) < WS_SUCCESS) {
908-
WLOG(WS_LOG_DEBUG, connectError,
909-
"CLIENT_USERAUTH_SENT", ssh->error);
910-
return WS_FATAL_ERROR;
911-
}
912-
}
913-
}
914-
915893
ssh->connectState = CONNECT_SERVER_USERAUTH_ACCEPT_DONE;
916894
WLOG(WS_LOG_DEBUG, connectState, "SERVER_USERAUTH_ACCEPT_DONE");
917895
NO_BREAK;

wolfssh/internal.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,9 +1154,6 @@ enum ServerStates {
11541154
SERVER_KEXINIT_DONE,
11551155
SERVER_USERAUTH_REQUEST_DONE,
11561156
SERVER_USERAUTH_ACCEPT_DONE,
1157-
SERVER_USERAUTH_ACCEPT_KEYBOARD,
1158-
SERVER_USERAUTH_ACCEPT_KEYBOARD_NEXT,
1159-
SERVER_USERAUTH_ACCEPT_KEYBOARD_DONE,
11601157
SERVER_CHANNEL_OPEN_DONE,
11611158
SERVER_DONE
11621159
};

0 commit comments

Comments
 (0)