Fix the bug that libssh2 could not connect if the sftp server
sends data before sending the version string.
http://tools.ietf.org/html/rfc4253#section-4.2
"The server MAY send other lines of data before sending the version
string. Each line SHOULD be terminated by a Carriage Return and Line
Feed. Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
in ISO-10646 UTF-8 [RFC3629] (language is not specified). Clients
MUST be able to process such lines."
--- src/session.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) Perhaps a nicer fix is to move the do loop inside banner_receive(). diff --git a/src/session.c b/src/session.c index 0b05843..c8d21fe 100644 --- a/src/session.c +++ b/src/session.c @@ -659,11 +659,15 @@ session_startup(LIBSSH2_SESSION *session, libssh2_socket_t sock) } if (session->startup_state == libssh2_NB_state_sent) { - rc = banner_receive(session); - if (rc) { - return _libssh2_error(session, rc, - "Failed getting banner"); - } + do { + session->banner_TxRx_state = libssh2_NB_state_idle; + + rc = banner_receive(session); + if (rc) { + return _libssh2_error(session, rc, + "Failed getting banner"); + } + } while( strncmp( "SSH-", session->remote.banner, 4)); session->startup_state = libssh2_NB_state_sent1; } -- 1.7.3.1.msysgit.0 _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-develReceived on 2011-01-31