From 1b471256d4371f4789da6fa345ead4015623abbe Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 29 Sep 2010 12:11:43 +0200 Subject: [PATCH] misc: Differentiate between client and server in ssh_analyze_banner. --- include/libssh/misc.h | 2 +- src/client.c | 2 +- src/misc.c | 10 ++++++++-- src/server.c | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/libssh/misc.h b/include/libssh/misc.h index 28e67610..a2f0239a 100644 --- a/include/libssh/misc.h +++ b/include/libssh/misc.h @@ -30,7 +30,7 @@ int ssh_file_readaccess_ok(const char *file); char *ssh_path_expand_tilde(const char *d); char *ssh_path_expand_escape(ssh_session session, const char *s); -int ssh_analyze_banner(ssh_session session, int *ssh1, int *ssh2); +int ssh_analyze_banner(ssh_session session, int server, int *ssh1, int *ssh2); /* macro for byte ordering */ uint64_t ntohll(uint64_t); diff --git a/src/client.c b/src/client.c index f6be34fb..f456e0de 100644 --- a/src/client.c +++ b/src/client.c @@ -492,7 +492,7 @@ static void ssh_client_connection_callback(ssh_session session){ "SSH server banner: %s", session->serverbanner); /* Here we analyze the different protocols the server allows. */ - if (ssh_analyze_banner(session, &ssh1, &ssh2) < 0) { + if (ssh_analyze_banner(session, 0, &ssh1, &ssh2) < 0) { goto error; } /* Here we decide which version of the protocol to use. */ diff --git a/src/misc.c b/src/misc.c index bed00419..061eaf3b 100644 --- a/src/misc.c +++ b/src/misc.c @@ -688,6 +688,7 @@ char *ssh_path_expand_escape(ssh_session session, const char *s) { * server. * * @param session The session to analyze the banner from. + * @param server 0 means we are a client, 1 a server. * @param ssh1 The variable which is set if it is a SSHv1 server. * @param ssh2 The variable which is set if it is a SSHv2 server. * @@ -695,10 +696,15 @@ char *ssh_path_expand_escape(ssh_session session, const char *s) { * * @see ssh_get_banner() */ -int ssh_analyze_banner(ssh_session session, int *ssh1, int *ssh2) { - const char *banner = session->clientbanner; +int ssh_analyze_banner(ssh_session session, int server, int *ssh1, int *ssh2) { + const char *banner; const char *openssh; + if (server) { + banner = session->clientbanner; + } else { + banner = session->serverbanner; + } if (banner == NULL || strlen(banner) <= 4 || diff --git a/src/server.c b/src/server.c index b440f2bf..ac5eb05f 100644 --- a/src/server.c +++ b/src/server.c @@ -435,7 +435,7 @@ static void ssh_server_connection_callback(ssh_session session){ "SSH client banner: %s", session->clientbanner); /* Here we analyze the different protocols the server allows. */ - if (ssh_analyze_banner(session, &ssh1, &ssh2) < 0) { + if (ssh_analyze_banner(session, 1, &ssh1, &ssh2) < 0) { goto error; } /* Here we decide which version of the protocol to use. */