From 6cdbc01208dad2113effda008be4f529b424a6d7 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Sat, 24 Apr 2010 22:46:19 +0200 Subject: Fixes infinite loops Thanks to Xi Wang for the patches --- libssh/auth.c | 3 ++- libssh/auth1.c | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'libssh') diff --git a/libssh/auth.c b/libssh/auth.c index b0e0e905..3961f788 100644 --- a/libssh/auth.c +++ b/libssh/auth.c @@ -218,7 +218,8 @@ static int wait_auth_status(ssh_session session) { enter_function(); while (session->auth_state == SSH_AUTH_STATE_NONE) { - ssh_handle_packets(session,-1); + if (ssh_handle_packets(session,-1) != SSH_OK) + break; } switch(session->auth_state){ case SSH_AUTH_STATE_ERROR: diff --git a/libssh/auth1.c b/libssh/auth1.c index 3571d76d..4154728d 100644 --- a/libssh/auth1.c +++ b/libssh/auth1.c @@ -38,7 +38,8 @@ static int wait_auth1_status(ssh_session session) { enter_function(); /* wait for a packet */ while(session->auth_state == SSH_AUTH_STATE_NONE) - ssh_handle_packets(session,-1); + if (ssh_handle_packets(session,-1) != SSH_OK) + break; ssh_log(session,SSH_LOG_PROTOCOL,"Auth state : %d",session->auth_state); leave_function(); switch(session->auth_state) { @@ -57,9 +58,10 @@ void ssh_auth1_handler(ssh_session session, uint8_t type){ ssh_set_error(session,SSH_FATAL,"SSH_SMSG_SUCCESS or FAILED received in wrong state"); return; } - if(type==SSH_SMSG_SUCCESS) + if(type==SSH_SMSG_SUCCESS){ session->auth_state=SSH_AUTH_STATE_SUCCESS; - if(type==SSH_SMSG_FAILURE) + session->session_state=SSH_SESSION_STATE_AUTHENTICATED; + } else if(type==SSH_SMSG_FAILURE) session->auth_state=SSH_AUTH_STATE_FAILED; } -- cgit