MXS-2483: Store server SSLContext in unique_ptr

This commit is contained in:
Markus Mäkelä
2019-05-21 07:00:42 +03:00
parent 9c6ec5e6c9
commit bc500d2565
3 changed files with 13 additions and 11 deletions

View File

@ -519,12 +519,12 @@ public:
mxs::SSLContext* ssl_context() const 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<mxs::SSLContext> ssl)
{ {
m_ssl_context = ssl; m_ssl_context.swap(ssl);
} }
protected: protected:
@ -538,5 +538,6 @@ private:
static const int DEFAULT_CHARSET = 0x08; /**< The latin1 charset */ static const int DEFAULT_CHARSET = 0x08; /**< The latin1 charset */
maxbase::EMAverage m_response_time; /**< Response time calculations for this server */ maxbase::EMAverage m_response_time; /**< Response time calculations for this server */
std::mutex m_average_write_mutex; /**< Protects response time from concurrent writing */ std::mutex m_average_write_mutex; /**< Protects response time from concurrent writing */
mxs::SSLContext* m_ssl_context; /**< SSL context */
std::unique_ptr<mxs::SSLContext> m_ssl_context; /**< SSL context */
}; };

View File

@ -441,11 +441,12 @@ bool runtime_enable_server_ssl(Server* server,
else if (key && cert && ca) else if (key && cert && ca)
{ {
std::lock_guard<std::mutex> guard(crt_lock); std::lock_guard<std::mutex> guard(crt_lock);
mxs::SSLContext* ssl = create_ssl(server->name(), key, cert, ca, version, depth, verify); std::unique_ptr<mxs::SSLContext> ssl(create_ssl(server->name(), key, cert, ca,
version, depth, verify));
if (ssl) if (ssl)
{ {
server->set_ssl_context(ssl); server->set_ssl_context(std::move(ssl));
if (server->serialize()) if (server->serialize())
{ {

View File

@ -6347,12 +6347,12 @@ static int blr_set_master_ssl(ROUTER_INSTANCE* router,
{CN_SSL_VERIFY_PEER_CERTIFICATE, "true"} {CN_SSL_VERIFY_PEER_CERTIFICATE, "true"}
}); });
auto ssl = mxs::SSLContext::create(params); std::unique_ptr<mxs::SSLContext> ssl(mxs::SSLContext::create(params));
if (ssl) if (ssl)
{ {
updated = 1; 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 */ /* Update options in router fields */
if (!config.ssl_key.empty()) if (!config.ssl_key.empty())