From 4a03accc34638b221fc722afbcd45f64c8e53e8e Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Sat, 5 Feb 2011 17:16:14 +0100 Subject: [PATCH 01/15] Fix compile warning about PLUGIN_SUPPORT being redefined. --- GNUmakefile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 0f5b734..f46d315 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -12,7 +12,6 @@ RANLIB := ranlib CFLAGS += -pipe -Wall USE_SSL ?= NO USE_BIGENDIAN ?= AUTO -USE_PLUGINS ?= YES BITS ?= AUTO SILENT ?= YES TERSE ?= NO @@ -43,7 +42,6 @@ UHUB_PREFIX ?= c:/uhub/ CFLAGS += -mno-cygwin LDFLAGS += -mno-cygwin BIN_EXT ?= .exe -USE_PLUGINS := NO else DESTDIR ?= / UHUB_CONF_DIR ?= $(DESTDIR)/etc/uhub @@ -121,11 +119,7 @@ CFLAGS += -DSSL_SUPPORT LDLIBS += -lssl endif -ifeq ($(USE_PLUGINS),YES) -CFLAGS += -DPLUGIN_SUPPORT LDLIBS += -ldl -endif - GIT_VERSION=$(shell git describe --tags 2>/dev/null || echo "") GIT_REVISION=$(shell git show --abbrev-commit 2>/dev/null | head -n 1 | cut -f 2 -d " " || echo "") From 6becadc984ffa544ce2d523af56cd0225c6cde2d Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Sat, 5 Feb 2011 17:18:08 +0100 Subject: [PATCH 02/15] Compile fix for gcc. --- src/adc/sid.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/adc/sid.h b/src/adc/sid.h index e2e30d6..0def755 100644 --- a/src/adc/sid.h +++ b/src/adc/sid.h @@ -25,7 +25,6 @@ struct sid_pool; struct hub_user; -extern const char* BASE32_ALPHABET; extern char* sid_to_string(sid_t sid_); extern sid_t string_to_sid(const char* sid); From e30505b54e4ae11587283f39addf3f228a8abb2f Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Thu, 19 Aug 2010 11:37:18 +0200 Subject: [PATCH 03/15] Fix 100% CPU issue with SSL connections. --- src/network/connection.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/connection.c b/src/network/connection.c index 0c4c491..c48cc19 100644 --- a/src/network/connection.c +++ b/src/network/connection.c @@ -161,7 +161,7 @@ ssize_t net_con_send(struct net_connection* con, const void* buf, size_t len) LOG_PROTO("SSL_write(con=%p, buf=%p, len=" PRINTF_SIZE_T ") => %d", con, buf, len, ret); if (ret <= 0) { - return -handle_openssl_error(con, ret); + return handle_openssl_error(con, ret); } } #endif @@ -201,7 +201,7 @@ ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len) } else { - return -handle_openssl_error(con, ret); + return handle_openssl_error(con, ret); } } #endif From 3ccce614d034f24812c640d78a475a6e2f5e9815 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Mon, 23 Aug 2010 21:40:07 +0200 Subject: [PATCH 04/15] Fix SSL/TLS related memory leak. --- src/network/connection.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/connection.c b/src/network/connection.c index c48cc19..3bf72c9 100644 --- a/src/network/connection.c +++ b/src/network/connection.c @@ -251,6 +251,9 @@ void* net_con_get_ptr(struct net_connection* con) void net_con_destroy(struct net_connection* con) { +#ifdef SSL_SUPPORT + SSL_free(con->ssl); +#endif hub_free(con); } From 3353049ae392f13dc6a55a3cdd3d36f7fdcbdb97 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Tue, 24 Aug 2010 22:58:10 +0200 Subject: [PATCH 05/15] Several SSL/TLS related memory leak fixes. --- src/core/hub.c | 1 - src/core/probe.c | 15 +++++++++++++++ src/core/user.c | 6 ++++++ src/network/backend.c | 5 +++++ src/network/network.c | 5 +++-- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/core/hub.c b/src/core/hub.c index 1a911e0..1e13377 100644 --- a/src/core/hub.c +++ b/src/core/hub.c @@ -824,7 +824,6 @@ void hub_shutdown_service(struct hub_info* hub) event_queue_shutdown(hub->queue); net_con_close(hub->server); - hub_free(hub->server); server_alt_port_stop(hub); uman_shutdown(hub); hub->status = hub_status_stopped; diff --git a/src/core/probe.c b/src/core/probe.c index cf0a47e..b2a8b2d 100644 --- a/src/core/probe.c +++ b/src/core/probe.c @@ -50,6 +50,18 @@ static void probe_net_event(struct net_connection* con, int events, void *arg) if (probe->hub->config->tls_enable && probe->hub->config->tls_require) { LOG_TRACE("Not TLS connection - closing connection."); + if (*probe->hub->config->tls_require_redirect_addr) + { + char buf[512]; + ssize_t len = snprintf(buf, sizeof(buf), "ISUP " ADC_PROTO_SUPPORT "\nISID AAAB\nIINF NIRedirecting...\nIQUI AAAB RD%s\n", probe->hub->config->tls_require_redirect_addr); + net_con_send(con, buf, (size_t) len); + LOG_TRACE("Not TLS connection - Redirecting to %s.", probe->hub->config->tls_require_redirect_addr); + } + else + { + LOG_TRACE("Not TLS connection - closing connection."); + } + probe_destroy(probe); } else #endif @@ -107,6 +119,8 @@ struct hub_probe* probe_create(struct hub_info* hub, int sd, struct ip_addr_enca if (probe == NULL) return NULL; /* OOM */ + LOG_TRACE("probe_create(): %p", probe); + probe->hub = hub; probe->connection = net_con_create(); net_con_initialize(probe->connection, sd, probe_net_event, probe, NET_EVENT_READ); @@ -118,6 +132,7 @@ struct hub_probe* probe_create(struct hub_info* hub, int sd, struct ip_addr_enca void probe_destroy(struct hub_probe* probe) { + LOG_TRACE("probe_destroy(): %p (connection=%p)", probe, probe->connection); if (probe->connection) { net_con_close(probe->connection); diff --git a/src/core/user.c b/src/core/user.c index 75a5664..40274b2 100644 --- a/src/core/user.c +++ b/src/core/user.c @@ -71,6 +71,12 @@ void user_destroy(struct hub_user* user) hub_recvq_destroy(user->recv_queue); hub_sendq_destroy(user->send_queue); + if (user->connection) + { + LOG_TRACE("user_destory() -> net_con_close(%p)", user->connection); + net_con_close(user->connection); + } + adc_msg_free(user->info); user_clear_feature_cast_support(user); hub_free(user); diff --git a/src/network/backend.c b/src/network/backend.c index d4f39c3..291b694 100644 --- a/src/network/backend.c +++ b/src/network/backend.c @@ -179,6 +179,10 @@ void net_con_close(struct net_connection* con) g_backend->handler.con_del(g_backend->data, con); +#ifdef SSL_SUPPORT + SSL_clear(con->ssl); +#endif + net_close(con->sd); con->sd = -1; @@ -196,6 +200,7 @@ struct net_cleanup_handler* net_cleanup_initialize(size_t max) void net_cleanup_shutdown(struct net_cleanup_handler* handler) { + net_cleanup_process(handler); hub_free(handler->queue); hub_free(handler); } diff --git a/src/network/network.c b/src/network/network.c index ddb541b..0c4275a 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -62,7 +62,6 @@ int net_initialize() LOG_TRACE("Initializing OpenSSL..."); SSL_library_init(); SSL_load_error_strings(); - OpenSSL_add_all_algorithms(); #endif /* SSL_SUPPORT */ net_initialized = 1; @@ -101,7 +100,9 @@ int net_destroy() net_backend_shutdown(); #ifdef SSL_SUPPORT - /* FIXME: Shutdown OpenSSL here. */ + ERR_free_strings(); + EVP_cleanup(); + CRYPTO_cleanup_all_ex_data(); #endif #ifdef WINSOCK From 47cf3326fdbd4a9eb816dd5b9a00b72856f4c293 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Tue, 24 Aug 2010 23:18:42 +0200 Subject: [PATCH 06/15] Don't do SSL_clear unless the SSL object is initialized. --- src/network/backend.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/backend.c b/src/network/backend.c index 291b694..3e8cd63 100644 --- a/src/network/backend.c +++ b/src/network/backend.c @@ -180,7 +180,8 @@ void net_con_close(struct net_connection* con) g_backend->handler.con_del(g_backend->data, con); #ifdef SSL_SUPPORT - SSL_clear(con->ssl); + if (con->ssl) + SSL_clear(con->ssl); #endif net_close(con->sd); From 474e2be308a87bc7dbf06928868cb5f22b809e93 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Tue, 24 Aug 2010 23:22:37 +0200 Subject: [PATCH 07/15] Fix stupid mistake. --- src/core/probe.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/probe.c b/src/core/probe.c index b2a8b2d..c7fb620 100644 --- a/src/core/probe.c +++ b/src/core/probe.c @@ -61,7 +61,6 @@ static void probe_net_event(struct net_connection* con, int events, void *arg) { LOG_TRACE("Not TLS connection - closing connection."); } - probe_destroy(probe); } else #endif From a79fcd796e452894ba0aa682b45418e6b7186a28 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Wed, 1 Sep 2010 23:57:55 +0200 Subject: [PATCH 08/15] Shutdown SSL on close. --- src/core/hub.c | 1 + src/network/backend.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/core/hub.c b/src/core/hub.c index 1e13377..15e519c 100644 --- a/src/core/hub.c +++ b/src/core/hub.c @@ -695,6 +695,7 @@ static int load_ssl_certificates(struct hub_info* hub, struct hub_config* config /* Disable SSLv2 */ SSL_CTX_set_options(hub->ssl_ctx, SSL_OP_NO_SSLv2); + SSL_CTX_set_quiet_shutdown(hub->ssl_ctx, 1); if (SSL_CTX_use_certificate_file(hub->ssl_ctx, config->tls_certificate, SSL_FILETYPE_PEM) < 0) { diff --git a/src/network/backend.c b/src/network/backend.c index 3e8cd63..1f5579d 100644 --- a/src/network/backend.c +++ b/src/network/backend.c @@ -181,7 +181,10 @@ void net_con_close(struct net_connection* con) #ifdef SSL_SUPPORT if (con->ssl) + { + SSL_shutdown(con->ssl); SSL_clear(con->ssl); + } #endif net_close(con->sd); From f13bcd8c2821c5834e4dc6d111a95129aa39eb86 Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Fri, 12 Nov 2010 11:31:16 +0100 Subject: [PATCH 09/15] Minor compile fixes. --- src/adc/sid.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/adc/sid.c b/src/adc/sid.c index 85f43bb..f334516 100644 --- a/src/adc/sid.c +++ b/src/adc/sid.c @@ -120,7 +120,6 @@ void sid_pool_destroy(struct sid_pool* pool) sid_t sid_alloc(struct sid_pool* pool, struct hub_user* user) { sid_t n; - if (pool->count >= (pool->max - pool->min)) { #ifdef DEBUG_SID @@ -129,8 +128,7 @@ sid_t sid_alloc(struct sid_pool* pool, struct hub_user* user) return 0; } - n = ++pool->count; - + n = (++pool->count); for (; (pool->map[n % pool->max]); n++) ; #ifdef DEBUG_SID From 169b8a4a758d62023ac7cb24e2b623eba0a45bbf Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Wed, 18 Aug 2010 23:32:53 +0200 Subject: [PATCH 10/15] Added option to redirect from adc:// to adcs:// if tls is required. --- GNUmakefile | 2 +- src/core/config.xml | 11 +++++++++++ src/core/gen_config.c | 17 +++++++++++++++++ src/core/gen_config.h | 1 + src/core/probe.c | 3 +-- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index f46d315..2f22a6e 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -10,7 +10,7 @@ LD := $(CC) MV := mv RANLIB := ranlib CFLAGS += -pipe -Wall -USE_SSL ?= NO +USE_SSL ?= YES USE_BIGENDIAN ?= AUTO BITS ?= AUTO SILENT ?= YES diff --git a/src/core/config.xml b/src/core/config.xml index b8066ea..895314c 100644 --- a/src/core/config.xml +++ b/src/core/config.xml @@ -417,6 +417,17 @@ 0.3.0 + + + + +