aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/sample.c8
-rw-r--r--libssh/auth.c3
-rw-r--r--libssh/auth1.c8
3 files changed, 11 insertions, 8 deletions
diff --git a/examples/sample.c b/examples/sample.c
index c847635..040a2e1 100644
--- a/examples/sample.c
+++ b/examples/sample.c
@@ -240,7 +240,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
channels[0]=NULL;
}
if(channels[0]){
- while(channel && channel_is_open(channel) && channel_poll(channel,0)){
+ while(channel && channel_is_open(channel) && channel_poll(channel,0)>0){
lus=channel_read_buffer(channel,readbuf,0,0);
if(lus==-1){
fprintf(stderr, "Error reading channel: %s\n",
@@ -259,7 +259,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
return;
}
}
- while(channel && channel_is_open(channel) && channel_poll(channel,1)){ /* stderr */
+ while(channel && channel_is_open(channel) && channel_poll(channel,1)>0){ /* stderr */
lus=channel_read_buffer(channel,readbuf,0,1);
if(lus==-1){
fprintf(stderr, "Error reading channel: %s\n",
@@ -332,7 +332,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
channels[0]=NULL;
}
if(outchannels[0]){
- while(channel && channel_is_open(channel) && channel_poll(channel,0)){
+ while(channel && channel_is_open(channel) && channel_poll(channel,0)>0){
lus=channel_read(channel,buffer,sizeof(buffer),0);
if(lus==-1){
fprintf(stderr, "Error reading channel: %s\n",
@@ -351,7 +351,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
return;
}
}
- while(channel && channel_is_open(channel) && channel_poll(channel,1)){ /* stderr */
+ while(channel && channel_is_open(channel) && channel_poll(channel,1)>0){ /* stderr */
lus=channel_read(channel,buffer,sizeof(buffer),1);
if(lus==-1){
fprintf(stderr, "Error reading channel: %s\n",
diff --git a/libssh/auth.c b/libssh/auth.c
index b0e0e90..3961f78 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 3571d76..4154728 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;
}