Skip to content

Commit 3130a8d

Browse files
author
Bogdan Degtyariov
committed
Merge branch 'master' of myrepo.no.oracle.com:mysql-connector-cpp
2 parents 6f9424a + c0ce9b6 commit 3130a8d

File tree

3 files changed

+83
-29
lines changed

3 files changed

+83
-29
lines changed

cdk/extra/wolfssl/CMakeLists.txt

Lines changed: 59 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,42 @@ endif()
3535
INCLUDE_DIRECTORIES("${WOLFSSL_SOURCE_DIR}")
3636

3737

38+
#
39+
# Determine WolfSSL version
40+
#
41+
42+
set(GETWOLFSSLVERSION_SOURCEFILE "${CMAKE_CURRENT_BINARY_DIR}/getwolfsslversion.c")
43+
file(WRITE "${GETWOLFSSLVERSION_SOURCEFILE}"
44+
"#include <stdio.h>\n"
45+
"#include <wolfssl/ssl.h>\n"
46+
"int main() {\n"
47+
" printf(\"%s\",LIBWOLFSSL_VERSION_STRING);\n"
48+
"}\n"
49+
)
50+
51+
# Compile and run the created executable, store output in MYSQL_VERSION
52+
try_run(_run_result _compile_result
53+
"${CMAKE_BINARY_DIR}"
54+
"${GETWOLFSSLVERSION_SOURCEFILE}"
55+
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${WOLFSSL_SOURCE_DIR}"
56+
RUN_OUTPUT_VARIABLE _WOLFSSL_VERSION
57+
)
58+
59+
UNSET(OPENSSL_VERSION_GLOBAL CACHE)
60+
IF (_WOLFSSL_VERSION)
61+
SET(WOLFSSL_VERSION_GLOBAL ${_WOLFSSL_VERSION} CACHE INTERNAL "WolfSSL Version")
62+
ENDIF()
63+
64+
65+
if (${WOLFSSL_VERSION_GLOBAL} VERSION_GREATER "3.15.6")
66+
set(WOLFSSL_HAS_TLS13 true)
67+
MESSAGE(STATUS "WOLFSSL TLSv1.3 enabled")
68+
else()
69+
set(WOLFSSL_HAS_TLS13 false)
70+
MESSAGE(STATUS "WOLFSSL TLSv1.3 disabled")
71+
endif()
72+
73+
3874
CHECK_TYPE_SIZE("long" SIZEOF_LONG)
3975
CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
4076
ADD_DEFINITIONS(-DSIZEOF_LONG=${SIZEOF_LONG} -DSIZEOF_LONG_LONG=${SIZEOF_LONG_LONG})
@@ -63,6 +99,25 @@ ADD_DEFINITIONS(
6399
-DWOLFSSL_CERT_GEN
64100
)
65101

102+
if (WOLFSSL_HAS_TLS13)
103+
ADD_DEFINITIONS(
104+
-DWOLFSSL_TLS13
105+
-DHAVE_TLS_EXTENSIONS
106+
-DHAVE_SUPPORTED_CURVES
107+
-DHAVE_FFDHE_2048
108+
-DHAVE_HKDF
109+
-DWC_RSA_PSS
110+
-DHAVE_POLY1305
111+
-DHAVE_ONE_TIME_AUTH
112+
-DHAVE_CHACHA
113+
-DHAVE_AESGCM
114+
-DHAVE_AESCCM
115+
-DSESSION_CERTS
116+
)
117+
118+
endif()
119+
120+
66121
SET(WOLFSSL_SOURCES ${WOLFSSL_SOURCE_DIR}/src/crl.c
67122
${WOLFSSL_SOURCE_DIR}/src/internal.c
68123
${WOLFSSL_SOURCE_DIR}/src/keys.c
@@ -72,6 +127,10 @@ SET(WOLFSSL_SOURCES ${WOLFSSL_SOURCE_DIR}/src/crl.c
72127
${WOLFSSL_SOURCE_DIR}/src/ocsp.c
73128
${WOLFSSL_SOURCE_DIR}/src/ssl.c )
74129

130+
if (WOLFSSL_HAS_TLS13)
131+
list(APPEND WOLFSSL_SOURCES ${WOLFSSL_SOURCE_DIR}/src/tls13.c)
132+
endif()
133+
75134
add_library(wolfssl STATIC ${WOLFSSL_SOURCES})
76135

77136
target_include_directories(wolfssl
@@ -175,29 +234,3 @@ add_library(wolfcrypto STATIC ${WOLFCRYPT_SOURCES})
175234
target_link_libraries(wolfssl INTERFACE wolfcrypto)
176235

177236

178-
#
179-
# Determine WolfSSL version
180-
#
181-
182-
set(GETWOLFSSLVERSION_SOURCEFILE "${CMAKE_CURRENT_BINARY_DIR}/getwolfsslversion.c")
183-
file(WRITE "${GETWOLFSSLVERSION_SOURCEFILE}"
184-
"#include <stdio.h>\n"
185-
"#include <ssl.h>\n"
186-
"int main() {\n"
187-
" printf(\"%s\", LIBWOLFSSL_VERSION_STRING);\n"
188-
"}\n"
189-
)
190-
191-
# Compile and run the created executable, store output in MYSQL_VERSION
192-
try_run(_run_result _compile_result
193-
"${CMAKE_BINARY_DIR}"
194-
"${GETWOLFSSLVERSION_SOURCEFILE}"
195-
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${SSL_INCLUDES}"
196-
RUN_OUTPUT_VARIABLE _WOLFSSL_VERSION
197-
)
198-
199-
200-
UNSET(OPENSSL_VERSION_GLOBAL CACHE)
201-
IF (_WOLFSSL_VERSION)
202-
SET(WOLFSSL_VERSION_GLOBAL ${_WOLFSSL_VERSION} CACHE INTERNAL "WolfSSL Version")
203-
ENDIF()

cdk/foundation/connection_openssl.cc

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ PUSH_SYS_WARNINGS_CDK
4141
#ifdef _WIN32
4242
#undef close
4343
#endif
44-
44+
// Wolfssl needs this include because of the NID_commonName enum
45+
#include <wolfssl/wolfcrypt/asn.h>
4546
#else
4647
#include <openssl/err.h>
4748
#endif
@@ -153,6 +154,12 @@ static const char tls_cipher_blocked[]= "!aNULL:!eNULL:!EXPORT:!LOW:!MD5:!DES:!R
153154
"!ECDH-RSA-DES-CBC3-SHA:!ECDH-ECDSA-DES-CBC3-SHA:"
154155
"!ECDHE-RSA-DES-CBC3-SHA:!ECDHE-ECDSA-DES-CBC3-SHA:";
155156

157+
static const char tls_cipher_suites[] ="TLS_AES_128_GCM_SHA256:"
158+
"TLS_AES_256_GCM_SHA384:"
159+
"TLS_CHACHA20_POLY1305_SHA256:"
160+
"TLS_AES_128_CCM_SHA256:"
161+
"TLS_AES_128_CCM_8_SHA256:";
162+
156163
static void throw_openssl_error_msg(const char* msg)
157164
{
158165
throw cdk::foundation::Error(cdk::foundation::cdkerrc::tls_error,
@@ -275,6 +282,7 @@ void connection_TLS_impl::do_connect()
275282
#ifndef WITH_SSL_WOLFSSL
276283
const
277284
#endif
285+
278286
SSL_METHOD* method = SSLv23_client_method();
279287

280288
if (!method)
@@ -288,9 +296,19 @@ void connection_TLS_impl::do_connect()
288296
std::string cipher_list;
289297
cipher_list.append(tls_cipher_blocked);
290298
cipher_list.append(tls_ciphers_list);
299+
#ifdef WITH_SSL_WOLFSSL
300+
cipher_list.append(tls_cipher_suites);
301+
#endif
291302

292303
SSL_CTX_set_cipher_list(m_tls_ctx, cipher_list.c_str());
293304

305+
#if !defined (WITH_SSL_WOLFSSL) && (OPENSSL_VERSION_NUMBER>=0x1010100fL)
306+
//OpenSSL TLSv1.3
307+
SSL_CTX_set_ciphersuites(m_tls_ctx, tls_cipher_suites);
308+
#endif
309+
310+
311+
294312
if (m_options.ssl_mode()
295313
>=
296314
cdk::foundation::connection::TLS::Options::SSL_MODE::VERIFY_CA
@@ -436,6 +454,7 @@ void connection_TLS_impl::verify_server_cert()
436454
subject= X509_get_subject_name((X509 *) server_cert);
437455
// Find the CN location in the subject
438456
cn_loc= X509_NAME_get_index_by_NID(subject, NID_commonName, -1);
457+
439458
if (cn_loc < 0)
440459
{
441460
throw_openssl_error_msg("Failed to get CN location in the certificate subject");
@@ -458,7 +477,7 @@ void connection_TLS_impl::verify_server_cert()
458477
#if OPENSSL_VERSION_NUMBER > 0x10100000L
459478
cn= ASN1_STRING_get0_data(cn_asn1);
460479
#else
461-
cn= ASN1_STRING_data(cn_asn1);
480+
cn= (const unsigned char*)(ASN1_STRING_data(cn_asn1));
462481
#endif
463482

464483
// There should not be any NULL embedded in the CN

include/mysqlx/xapi.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2836,7 +2836,9 @@ mysqlx_column_get_type(mysqlx_result_t *res, uint32_t pos);
28362836
@param res result handle
28372837
@param pos zero-based column number
28382838
2839-
@return column collation number. TODO: specify these
2839+
@return column collation number. The number matches the ID
2840+
in the INFORMATION_SCHEMA.COLLATIONS table.
2841+
@see https://dev.mysql.com/doc/mysql/en/collations-table.html
28402842
28412843
@ingroup xapi_md
28422844
*/

0 commit comments

Comments
 (0)