diff options
author | Andreas Schneider <asn@cynapses.org> | 2010-09-29 11:26:35 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cynapses.org> | 2010-09-29 11:26:35 +0200 |
commit | 8b719e51cf3e1b0ee7bee93a006bfa517fba4926 (patch) | |
tree | 0db367ac509ec9d062093387fc0b6fd423f46c6c /src/client.c | |
parent | 72b62d3064fb567015aeed72d800b9eb4ca22a79 (diff) | |
download | libssh-8b719e51cf3e1b0ee7bee93a006bfa517fba4926.tar.gz libssh-8b719e51cf3e1b0ee7bee93a006bfa517fba4926.tar.xz libssh-8b719e51cf3e1b0ee7bee93a006bfa517fba4926.zip |
misc: Move ssh_analyze_banner to a common location.
Don't duplicate functions!
Diffstat (limited to 'src/client.c')
-rw-r--r-- | src/client.c | 65 |
1 files changed, 2 insertions, 63 deletions
diff --git a/src/client.c b/src/client.c index 0b55f35..f6be34f 100644 --- a/src/client.c +++ b/src/client.c @@ -37,6 +37,8 @@ #include "libssh/session.h" #include "libssh/dh.h" #include "libssh/threads.h" +#include "libssh/misc.h" + #define set_status(session, status) do {\ if (session->callbacks && session->callbacks->connect_status_function) \ session->callbacks->connect_status_function(session->callbacks->userdata, status); \ @@ -114,69 +116,6 @@ static int callback_receive_banner(const void *data, size_t len, void *user) { return ret; } -/** - * @internal - * - * @brief Analyze the SSH banner to find out if we have a SSHv1 or SSHv2 - * server. - * - * @param session The session to analyze the banner from. - * @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. - * - * @return 0 on success, < 0 on error. - * - * @see ssh_get_banner() - */ -static int ssh_analyze_banner(ssh_session session, int *ssh1, int *ssh2) { - const char *banner = session->serverbanner; - const char *openssh; - - ssh_log(session, SSH_LOG_RARE, "Analyzing banner: %s", banner); - - if (strncmp(banner, "SSH-", 4) != 0) { - ssh_set_error(session, SSH_FATAL, "Protocol mismatch: %s", banner); - return -1; - } - - /* - * Typical banners e.g. are: - * SSH-1.5-blah - * SSH-1.99-blah - * SSH-2.0-blah - */ - switch(banner[4]) { - case '1': - *ssh1 = 1; - if (banner[6] == '9') { - *ssh2 = 1; - } else { - *ssh2 = 0; - } - break; - case '2': - *ssh1 = 0; - *ssh2 = 1; - break; - default: - ssh_set_error(session, SSH_FATAL, "Protocol mismatch: %s", banner); - return -1; - } - - openssh = strstr(banner, "OpenSSH"); - if (openssh != NULL) { - int major, minor; - major = strtol(openssh + 8, (char **) NULL, 10); - minor = strtol(openssh + 10, (char **) NULL, 10); - session->openssh = SSH_VERSION_INT(major, minor, 0); - ssh_log(session, SSH_LOG_RARE, - "We are talking to an OpenSSH server version: %d.%d (%x)", - major, minor, session->openssh); - } - - return 0; -} - /** @internal * @brief Sends a SSH banner to the server. * |