MySQL 8.0.37
Source Code Documentation
ssl_acceptor_context_operator.h
Go to the documentation of this file.
1/* Copyright (c) 2020, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef SSL_ACCEPTOR_CONTEXT_OPERATOR
25#define SSL_ACCEPTOR_CONTEXT_OPERATOR
26
27#include <my_rcu_lock.h> /* MyRcuLock */
28#include "sql/ssl_acceptor_context_data.h" /** Ssl_acceptor_context_data */
29
30/* Types of supported contexts */
35};
36
38class TLS_channel;
39
40/** TLS context access protector */
42 protected:
46
48
50
51 /* F.R.I.E.N.D.S. */
53 friend class TLS_channel;
54};
55
58
59/** TLS context manager */
61 public:
62 /**
63 Initialize the single instance of the acceptor
64
65 @param [out] out Object initialized by the function
66 @param [in] channel Name of the channel
67 @param [in] use_ssl_arg Pass false if you don't want the actual
68 SSL context created
69 (as in when SSL is initially disabled)
70 @param [in] callbacks Handle to the initialization callback object
71 @param [in] db_init Whether database is being initialized or not
72
73 @returns Initialization status
74 @retval true failure to init
75 @retval false initialized ok
76*/
78 std::string channel, bool use_ssl_arg,
79 Ssl_init_callback *callbacks, bool db_init);
80
81 /**
82 De-initialize the single instance of the acceptor
83
84 @param [in] container TLS acceptor context object
85 */
87 /**
88 Re-initialize the single instance of the acceptor
89
90 @param [in,out] container TLS acceptor context object
91 @param [in] channel Name of the channel
92 @param [in] callbacks Handle to the initialization callback object
93 @param [out] error SSL Error information
94 @param [in] force Activate the SSL settings even if this will lead
95 to disabling SSL
96 */
99 enum enum_ssl_init_error *error, bool force);
100};
101
103
104/** TLS context access wrapper for ease of use */
106 public:
108 : read_lock_(context->lock_) {}
110
111 /** Access protected @ref Ssl_acceptor_context_data */
112 operator const Ssl_acceptor_context_data *() {
114 return c;
115 }
116
117 /**
118 Access to the SSL_CTX from the protected @ref Ssl_acceptor_context_data
119 */
120 operator SSL_CTX *() {
122 return c->ssl_acceptor_fd_->ssl_context;
123 }
124
125 /**
126 Access to the SSL from the protected @ref Ssl_acceptor_context_data
127 */
128 operator SSL *() {
130 return c->acceptor_;
131 }
132
133 /**
134 Access to st_VioSSLFd from the protected @ref Ssl_acceptor_context_data
135 */
136 operator struct st_VioSSLFd *() {
138 return c->ssl_acceptor_fd_;
139 }
140
141 /**
142 Fetch given property from underlying TLS context
143
144 @param [in] property_type Property to be fetched
145
146 @returns Value of property for given context. Empty in case of failure.
147 */
148 std::string show_property(Ssl_acceptor_context_property_type property_type);
149
150 /**
151 Fetch channel name
152
153 @returns Name of underlying channel
154 */
155 std::string channel_name();
156
157 /**
158 TLS context validity
159
160 @returns Validity of TLS context
161 @retval true Valid
162 @retval false Invalid
163 */
164 bool have_ssl();
165
166 private:
167 /** Read lock over TLS context */
169};
170
171bool have_ssl();
172
173#endif // SSL_ACCEPTOR_CONTEXT_OPERATOR
app_data_ptr new_data(u_int n, char *val, cons_type consensus)
static const sasl_callback_t callbacks[]
Definition: auth_ldap_sasl_client.h:45
TLS context access wrapper for ease of use.
Definition: ssl_acceptor_context_operator.h:105
Ssl_acceptor_context_data_lock::ReadLock read_lock_
Read lock over TLS context.
Definition: ssl_acceptor_context_operator.h:168
Lock_and_access_ssl_acceptor_context(Ssl_acceptor_context_container *context)
Definition: ssl_acceptor_context_operator.h:107
bool have_ssl()
TLS context validity.
Definition: ssl_acceptor_context_operator.cc:126
std::string show_property(Ssl_acceptor_context_property_type property_type)
Fetch given property from underlying TLS context.
Definition: ssl_acceptor_context_operator.cc:115
std::string channel_name()
Fetch channel name.
Definition: ssl_acceptor_context_operator.cc:121
High level read API for readers.
Definition: my_rcu_lock.h:113
A class that implements a limited version of the Read-Copy-Update lock pattern.
Definition: my_rcu_lock.h:80
TLS context access protector.
Definition: ssl_acceptor_context_operator.h:41
void switch_data(Ssl_acceptor_context_data *new_data)
Definition: ssl_acceptor_context_operator.cc:46
Ssl_acceptor_context_data_lock * lock_
Definition: ssl_acceptor_context_operator.h:49
~Ssl_acceptor_context_container()
Definition: ssl_acceptor_context_operator.cc:41
Ssl_acceptor_context_container(Ssl_acceptor_context_data *data)
Definition: ssl_acceptor_context_operator.cc:35
Container of SSL Acceptor context data.
Definition: ssl_acceptor_context_data.h:104
SSL * acceptor_
An SSL for ssl_acceptor_fd_ to allow access to parameters not in SSL_CTX to be available even if the ...
Definition: ssl_acceptor_context_data.h:203
struct st_VioSSLFd * ssl_acceptor_fd_
SSL_CTX barerer.
Definition: ssl_acceptor_context_data.h:196
Definition: ssl_init_callback.h:58
TLS context manager.
Definition: ssl_acceptor_context_operator.h:60
static void singleton_deinit(Ssl_acceptor_context_container *container)
De-initialize the single instance of the acceptor.
Definition: ssl_acceptor_context_operator.cc:95
static bool singleton_init(Ssl_acceptor_context_container **out, std::string channel, bool use_ssl_arg, Ssl_init_callback *callbacks, bool db_init)
Initialize the single instance of the acceptor.
Definition: ssl_acceptor_context_operator.cc:51
static void singleton_flush(Ssl_acceptor_context_container *container, std::string channel, Ssl_init_callback *callbacks, enum enum_ssl_init_error *error, bool force)
Re-initialize the single instance of the acceptor.
Definition: ssl_acceptor_context_operator.cc:100
Definition: atomics_array.h:39
Ssl_acceptor_context_property_type
Properties exposed by Ssl Acceptor context.
Definition: ssl_acceptor_context_data.h:44
bool have_ssl()
Definition: ssl_acceptor_context_operator.cc:131
Ssl_acceptor_context_type
Ssl_acceptor_context_data.
Definition: ssl_acceptor_context_operator.h:31
Ssl_acceptor_context_container * mysql_main
Definition: ssl_acceptor_context_operator.cc:32
Ssl_acceptor_context_container * mysql_admin
Definition: ssl_acceptor_context_operator.cc:33
Definition: task.h:427
Definition: violite.h:255
SSL_CTX * ssl_context
Definition: violite.h:256
enum_ssl_init_error
Definition: violite.h:236