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.per...@sartura.hr>
---
 src/client.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/client.c b/src/client.c
index 50d6d68..af525c1 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;
-- 
1.9.0


Reply via email to