MySQL 8.0.37
Source Code Documentation
ssl_acceptor_context_data.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_DATA_INCLUDED
25#define SSL_ACCEPTOR_CONTEXT_DATA_INCLUDED
26
27#include <string>
28
29#include "my_rcu_lock.h" /* MyRcuLock */
30#include "openssl/ossl_typ.h" /* SSL */
31#include "sql/ssl_init_callback.h" /* Ssl_init_callback */
32#include "violite.h" /* st_VioSSLFd, enum_ssl_init_error */
33
35class TLS_channel;
37
38/**
39 Properties exposed by Ssl Acceptor context
40
41 Note: Add new value before "last" and update
42 Ssl_acceptor_context_propert_type_names.
43*/
46 accepts,
73 last
74};
75/**
76 Note: Add new value before "last" and update
77 Ssl_acceptor_context_propert_type_names.
78*/
79
80/**
81 Fetch a string representation of SSL acceptor context property
82
83 @param [in] property_type Property type
84
85 @returns name of the property
86*/
87std::string Ssl_ctx_property_name(
89
90/**
91 Increment operator for Ssl_acceptor_context_type
92 Used by iterator
93
94 @param [in,out] property_type Current position in Ssl_acceptor_context_type
95
96 @returns incremented value for property_type
97*/
100
101/**
102 Container of SSL Acceptor context data
103*/
105 public:
106 /**
107 Ctor
108
109 @param [in] channel Name of the channel
110 @param [in] use_ssl_arg Don't bother at all to try and construct
111 an SSL_CTX and just make an empty
112 SslAcceptorContext. Used to pass the
113 --ssl/--admin-ssl options at startup.
114 @param [in] callbacks TLS context initialization callbacks
115 to get values of various options and
116 perform validation
117 @param [in] report_ssl_error Report any SSL errors resulting from trying
118 to initialize the SSL_CTX to error log
119 @param [out] out_error An optional slot to return SSL_CTX
120 initialization error information
121 */
122 Ssl_acceptor_context_data(std::string channel, bool use_ssl_arg,
124 bool report_ssl_error = true,
125 enum enum_ssl_init_error *out_error = nullptr);
126
127 /** Destructor */
129
130 protected:
131 /* Disable copy/assignment */
134 delete;
135
136 /* Disable move constructs */
139
140 /**
141 Fetch given property from underlying TLS context
142
143 @param [in] property_type Property to be fetched
144
145 @returns Value of property for given context. Empty in case of failure.
146 */
147 std::string show_property(
148 Ssl_acceptor_context_property_type property_type) const;
149
150 /** TLS context validity */
151 bool have_ssl() const { return ssl_acceptor_fd_ != nullptr; }
152
153 /** Get channel name */
154 const char *channel_name() const { return channel_.c_str(); }
155
156 /** Get Acceptor context */
157 operator struct st_VioSSLFd *() { return ssl_acceptor_fd_; }
158
159 /** Get SSL handle */
160 operator SSL *() { return acceptor_; }
161
162 /** Get current CA */
163 const char *current_ca() const { return current_ca_.c_str(); }
164
165 /** Get current CA Path */
166 const char *current_capath() const { return current_capath_.c_str(); }
167
168 /** Get current Certificate */
169 const char *current_cert() const { return current_cert_.c_str(); }
170
171 /** Get current Key */
172 const char *current_key() const { return current_key_.c_str(); }
173
174 /** Get current CRL certificate */
175 const char *current_crl() const { return current_crl_.c_str(); }
176
177 /** Get current CRL Path */
178 const char *current_crlpath() const { return current_crlpath_.c_str(); }
179
180 /** Get current TLS version */
181 const char *current_version() const { return current_version_.c_str(); }
182
183 /** Get current TLSv1.2 ciphers */
184 const char *current_cipher() const { return current_cipher_.c_str(); }
185
186 /** Get current TLSv1.3 ciphers */
187 const char *current_ciphersuites() const {
189 }
190
191 private:
192 /** Channel name */
193 std::string channel_;
194
195 /** SSL_CTX barerer */
197
198 /**
199 An SSL for @ref ssl_acceptor_fd_ to allow access to parameters not in
200 SSL_CTX to be available even if the current connection is not
201 encrypted.
202 */
204
205 /**
206 Copies of the current effective values for quick return via the
207 status vars
208 */
214
215 /* F.R.I.E.N.D.S. */
217 friend class TLS_channel;
219};
220
221#endif // SSL_ACCEPTOR_CONTEXT_DATA_INCLUDED
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
helper class to deal with optionally empty strings
Definition: ssl_init_callback.h:38
const char * c_str() const
Definition: ssl_init_callback.h:45
TLS context access protector.
Definition: ssl_acceptor_context_operator.h:41
Container of SSL Acceptor context data.
Definition: ssl_acceptor_context_data.h:104
Ssl_acceptor_context_data operator=(const Ssl_acceptor_context_data &)=delete
OptionalString current_version_
Definition: ssl_acceptor_context_data.h:209
OptionalString current_key_
Definition: ssl_acceptor_context_data.h:210
~Ssl_acceptor_context_data()
Destructor.
Definition: ssl_acceptor_context_data.cc:181
std::string show_property(Ssl_acceptor_context_property_type property_type) const
Fetch given property from underlying TLS context.
Definition: ssl_acceptor_context_data.cc:186
const char * current_cert() const
Get current Certificate.
Definition: ssl_acceptor_context_data.h:169
const char * channel_name() const
Get channel name.
Definition: ssl_acceptor_context_data.h:154
Ssl_acceptor_context_data operator=(Ssl_acceptor_context_data &&)=delete
OptionalString current_capath_
Definition: ssl_acceptor_context_data.h:209
const char * current_version() const
Get current TLS version.
Definition: ssl_acceptor_context_data.h:181
OptionalString current_crl_
Definition: ssl_acceptor_context_data.h:210
std::string channel_
Channel name.
Definition: ssl_acceptor_context_data.h:193
const char * current_key() const
Get current Key.
Definition: ssl_acceptor_context_data.h:172
Ssl_acceptor_context_data(Ssl_acceptor_context_data &&)=delete
const char * current_cipher() const
Get current TLSv1.2 ciphers.
Definition: ssl_acceptor_context_data.h:184
bool current_tls_session_cache_mode_
Definition: ssl_acceptor_context_data.h:213
const char * current_ciphersuites() const
Get current TLSv1.3 ciphers.
Definition: ssl_acceptor_context_data.h:187
OptionalString current_ciphersuites_
Definition: ssl_acceptor_context_data.h:210
OptionalString current_crlpath_
Definition: ssl_acceptor_context_data.h:211
OptionalString current_cipher_
Definition: ssl_acceptor_context_data.h:210
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
const char * current_capath() const
Get current CA Path.
Definition: ssl_acceptor_context_data.h:166
struct st_VioSSLFd * ssl_acceptor_fd_
SSL_CTX barerer.
Definition: ssl_acceptor_context_data.h:196
const char * current_ca() const
Get current CA.
Definition: ssl_acceptor_context_data.h:163
const char * current_crl() const
Get current CRL certificate.
Definition: ssl_acceptor_context_data.h:175
Ssl_acceptor_context_data(std::string channel, bool use_ssl_arg, Ssl_init_callback *callbacks, bool report_ssl_error=true, enum enum_ssl_init_error *out_error=nullptr)
Ctor.
Definition: ssl_acceptor_context_data.cc:124
OptionalString current_ca_
Copies of the current effective values for quick return via the status vars.
Definition: ssl_acceptor_context_data.h:209
OptionalString current_cert_
Definition: ssl_acceptor_context_data.h:209
bool have_ssl() const
TLS context validity.
Definition: ssl_acceptor_context_data.h:151
long current_tls_session_cache_timeout_
Definition: ssl_acceptor_context_data.h:212
const char * current_crlpath() const
Get current CRL Path.
Definition: ssl_acceptor_context_data.h:178
Ssl_acceptor_context_data(const Ssl_acceptor_context_data &)=delete
Definition: ssl_init_callback.h:58
TLS context manager.
Definition: ssl_acceptor_context_operator.h:60
Ssl_acceptor_context_property_type
Properties exposed by Ssl Acceptor context.
Definition: ssl_acceptor_context_data.h:44
std::string Ssl_ctx_property_name(Ssl_acceptor_context_property_type property_type)
Note: Add new value before "last" and update Ssl_acceptor_context_propert_type_names.
Definition: ssl_acceptor_context_data.cc:108
Ssl_acceptor_context_property_type & operator++(Ssl_acceptor_context_property_type &property_type)
Increment operator for Ssl_acceptor_context_type Used by iterator.
Definition: ssl_acceptor_context_data.cc:114
Definition: task.h:427
Definition: violite.h:255
Vio Lite.
enum_ssl_init_error
Definition: violite.h:236