From bc500d2565ed77e5a70f5d4bedbdd2e497719545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 21 May 2019 07:00:42 +0300 Subject: [PATCH] MXS-2483: Store server SSLContext in unique_ptr --- include/maxscale/server.hh | 15 ++++++++------- server/core/config_runtime.cc | 5 +++-- server/modules/routing/binlogrouter/blr_slave.cc | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/maxscale/server.hh b/include/maxscale/server.hh index f2bc2480a..bd0f9a171 100644 --- a/include/maxscale/server.hh +++ b/include/maxscale/server.hh @@ -519,12 +519,12 @@ public: mxs::SSLContext* ssl_context() const { - return m_ssl_context; + return m_ssl_context.get(); } - void set_ssl_context(mxs::SSLContext* ssl) + void set_ssl_context(std::unique_ptr ssl) { - m_ssl_context = ssl; + m_ssl_context.swap(ssl); } protected: @@ -535,8 +535,9 @@ protected: } private: - static const int DEFAULT_CHARSET = 0x08; /**< The latin1 charset */ - maxbase::EMAverage m_response_time; /**< Response time calculations for this server */ - std::mutex m_average_write_mutex; /**< Protects response time from concurrent writing */ - mxs::SSLContext* m_ssl_context; /**< SSL context */ + static const int DEFAULT_CHARSET = 0x08; /**< The latin1 charset */ + maxbase::EMAverage m_response_time; /**< Response time calculations for this server */ + std::mutex m_average_write_mutex; /**< Protects response time from concurrent writing */ + + std::unique_ptr m_ssl_context; /**< SSL context */ }; diff --git a/server/core/config_runtime.cc b/server/core/config_runtime.cc index adb3883ed..34318b1ac 100644 --- a/server/core/config_runtime.cc +++ b/server/core/config_runtime.cc @@ -441,11 +441,12 @@ bool runtime_enable_server_ssl(Server* server, else if (key && cert && ca) { std::lock_guard guard(crt_lock); - mxs::SSLContext* ssl = create_ssl(server->name(), key, cert, ca, version, depth, verify); + std::unique_ptr ssl(create_ssl(server->name(), key, cert, ca, + version, depth, verify)); if (ssl) { - server->set_ssl_context(ssl); + server->set_ssl_context(std::move(ssl)); if (server->serialize()) { diff --git a/server/modules/routing/binlogrouter/blr_slave.cc b/server/modules/routing/binlogrouter/blr_slave.cc index 5142c4737..48f93e2a5 100644 --- a/server/modules/routing/binlogrouter/blr_slave.cc +++ b/server/modules/routing/binlogrouter/blr_slave.cc @@ -6347,12 +6347,12 @@ static int blr_set_master_ssl(ROUTER_INSTANCE* router, {CN_SSL_VERIFY_PEER_CERTIFICATE, "true"} }); - auto ssl = mxs::SSLContext::create(params); + std::unique_ptr ssl(mxs::SSLContext::create(params)); if (ssl) { updated = 1; - router->service->dbref->server->set_ssl_context(ssl); + router->service->dbref->server->set_ssl_context(std::move(ssl)); /* Update options in router fields */ if (!config.ssl_key.empty())