diff options
-rw-r--r-- | libssh/client.c | 3 | ||||
-rw-r--r-- | libssh/dh.c | 3 | ||||
-rw-r--r-- | libssh/init.c | 1 | ||||
-rw-r--r-- | libssh/keyfiles.c | 6 | ||||
-rw-r--r-- | libssh/threads.c | 12 | ||||
-rw-r--r-- | tests/unittests/torture_knownhosts.c | 2 |
6 files changed, 21 insertions, 6 deletions
diff --git a/libssh/client.c b/libssh/client.c index 749284fe..d12aa117 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -701,10 +701,11 @@ int ssh_connect(ssh_session session) { /*, session->timeout * 1000 + session->timeout_usec); */ } - if (ret != SSH_OK) { + if (ret == SSH_ERROR) { leave_function(); return SSH_ERROR; } + set_status(session, 0.2f); session->alive = 1; diff --git a/libssh/dh.c b/libssh/dh.c index eff74bf9..74d799e6 100644 --- a/libssh/dh.c +++ b/libssh/dh.c @@ -55,7 +55,6 @@ #include "libssh/session.h" #include "libssh/keys.h" #include "libssh/dh.h" -#include "libssh/threads.h" /* todo: remove it */ #include "libssh/string.h" @@ -156,7 +155,7 @@ void ssh_crypto_finalize(void) { bignum_free(p); p = NULL; ssh_crypto_initialized=0; - ssh_threads_finalize(); + } } diff --git a/libssh/init.c b/libssh/init.c index d8e77228..5952e272 100644 --- a/libssh/init.c +++ b/libssh/init.c @@ -73,6 +73,7 @@ int ssh_init(void) { @returns 0 otherwise */ int ssh_finalize(void) { + ssh_threads_finalize(); ssh_free_global_poll_ctx(); ssh_regex_finalize(); ssh_crypto_finalize(); diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index 03782799..9512de0a 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -1615,6 +1615,12 @@ int ssh_is_server_known(ssh_session session) { return SSH_SERVER_ERROR; } + if (session->current_crypto == NULL){ + ssh_set_error(session, SSH_FATAL, + "ssh_is_host_known called without cryptographic context"); + leave_function(); + return SSH_SERVER_ERROR; + } host = ssh_lowercase(session->host); hostport = ssh_hostport(host,session->port); if (host == NULL || hostport == NULL) { diff --git a/libssh/threads.c b/libssh/threads.c index 63e9d83f..087b56c7 100644 --- a/libssh/threads.c +++ b/libssh/threads.c @@ -153,6 +153,10 @@ static void libcrypto_thread_finalize(){ */ int ssh_threads_init(void){ + static int threads_initialized=0; + int ret; + if(threads_initialized) + return SSH_OK; /* first initialize the user_callbacks with our default handlers if not * already the case */ @@ -166,11 +170,13 @@ int ssh_threads_init(void){ /* Then initialize the crypto libraries threading callbacks */ #ifdef HAVE_LIBGCRYPT - return libgcrypt_thread_init(); + ret = libgcrypt_thread_init(); #else /* Libcrypto */ - return libcrypto_thread_init(); + ret = libcrypto_thread_init(); #endif - return SSH_ERROR; + if(ret == SSH_OK) + threads_initialized=1; + return ret; } void ssh_threads_finalize(void){ diff --git a/tests/unittests/torture_knownhosts.c b/tests/unittests/torture_knownhosts.c index 3fd93abc..4d59e402 100644 --- a/tests/unittests/torture_knownhosts.c +++ b/tests/unittests/torture_knownhosts.c @@ -44,6 +44,7 @@ START_TEST (torture_knownhosts_port) int rc; char buffer[200]; FILE *file; + //int verbosity=SSH_LOG_FUNCTIONS; /* Connect to localhost:22, force the port to 1234 and then write * the known hosts file. Then check that the entry written is * [localhost]:1234 @@ -68,6 +69,7 @@ START_TEST (torture_knownhosts_port) session=ssh_new(); ssh_options_set(session,SSH_OPTIONS_HOST,"localhost"); ssh_options_set(session,SSH_OPTIONS_KNOWNHOSTS,KNOWNHOSTFILES); + //ssh_options_set(session,SSH_OPTIONS_LOG_VERBOSITY, &verbosity); rc=ssh_connect(session); ck_assert_msg(rc==SSH_OK,ssh_get_error(session)); session->port=1234; |