From e67d834156a381fe7ef7933d135130083b86d1e3 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Wed, 1 Sep 2010 16:05:06 +0200 Subject: Fix initialization of threading --- libssh/client.c | 3 ++- libssh/dh.c | 3 +-- libssh/init.c | 1 + libssh/keyfiles.c | 6 ++++++ libssh/threads.c | 12 +++++++++--- 5 files changed, 19 insertions(+), 6 deletions(-) (limited to 'libssh') 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){ -- cgit v1.2.3