aboutsummaryrefslogtreecommitdiff
path: root/src/client.c
diff options
context:
space:
mode:
authorLuka Perkov <luka.perkov@sartura.hr>2014-03-17 16:16:07 +0100
committerAndreas Schneider <asn@cryptomilk.org>2014-03-27 10:15:54 +0100
commitdbb2de272b57c7327204adb7b7bdef5c98bfbfd6 (patch)
tree50ec290d4615bc9b905f2bde505db171c5cae3d5 /src/client.c
parent9423a3a065c947ed5ff89da615fbd6ad7f61f60a (diff)
downloadlibssh-dbb2de272b57c7327204adb7b7bdef5c98bfbfd6.tar.gz
libssh-dbb2de272b57c7327204adb7b7bdef5c98bfbfd6.tar.xz
libssh-dbb2de272b57c7327204adb7b7bdef5c98bfbfd6.zip
client: fix corner case when sockets are manually created
If the sockets are created manually and passed to libssh the internal session state is set to SSH_SESSION_STATE_SOCKET_CONNECTED. Result of this fix can be verified by running torture_connect test (torture_connect_socket) with -vvvv flags. Signed-off-by: Luka Perkov <luka.perkov@sartura.hr> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/client.c')
-rw-r--r--src/client.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/client.c b/src/client.c
index 50d6d68f..af525c1e 100644
--- a/src/client.c
+++ b/src/client.c
@@ -60,12 +60,15 @@
static void socket_callback_connected(int code, int errno_code, void *user){
ssh_session session=(ssh_session)user;
- if(session->session_state != SSH_SESSION_STATE_CONNECTING){
+ if (session->session_state != SSH_SESSION_STATE_CONNECTING &&
+ session->session_state != SSH_SESSION_STATE_SOCKET_CONNECTED)
+ {
ssh_set_error(session,SSH_FATAL, "Wrong state in socket_callback_connected : %d",
session->session_state);
return;
}
+
SSH_LOG(SSH_LOG_RARE,"Socket connection callback: %d (%d)",code, errno_code);
if(code == SSH_SOCKET_CONNECTED_OK)
session->session_state=SSH_SESSION_STATE_SOCKET_CONNECTED;