Skip to content

Commit 632d064

Browse files
committed
Merge branch 'mysql-5.7-cluster-7.5' into mysql-5.7-cluster-7.6
Change-Id: I7f2274ed00eaa72a3a08262c0c6118073dc01ab2
2 parents 1440eef + 4a19cd4 commit 632d064

File tree

19 files changed

+169
-31
lines changed

19 files changed

+169
-31
lines changed

cmake/ssl.cmake

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,62 @@ MACRO(RESET_SSL_VARIABLES)
9292
UNSET(HAVE_SHA512_DIGEST_LENGTH CACHE)
9393
ENDMACRO()
9494

95+
# Fetch OpenSSL version number.
96+
# OpenSSL < 3:
97+
# #define OPENSSL_VERSION_NUMBER 0x1000103fL
98+
# Encoded as MNNFFPPS: major minor fix patch status
99+
#
100+
# OpenSSL 3:
101+
# #define OPENSSL_VERSION_NUMBER
102+
# ( (OPENSSL_VERSION_MAJOR<<28)
103+
# |(OPENSSL_VERSION_MINOR<<20)
104+
# |(OPENSSL_VERSION_PATCH<<4)
105+
# |_OPENSSL_VERSION_PRE_RELEASE )
106+
MACRO(FIND_OPENSSL_VERSION)
107+
FOREACH(version_part
108+
OPENSSL_VERSION_MAJOR
109+
OPENSSL_VERSION_MINOR
110+
OPENSSL_VERSION_PATCH
111+
)
112+
FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" ${version_part}
113+
REGEX "^#[\t ]*define[\t ]+${version_part}[\t ]+([0-9]+).*")
114+
STRING(REGEX REPLACE
115+
"^.*${version_part}[\t ]+([0-9]+).*" "\\1"
116+
${version_part} "${${version_part}}")
117+
ENDFOREACH()
118+
IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 3)
119+
# OpenSSL 3
120+
SET(OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_MAJOR}")
121+
SET(OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_MINOR}")
122+
SET(OPENSSL_FIX_VERSION "${OPENSSL_VERSION_PATCH}")
123+
ELSE()
124+
# Verify version number. Version information looks like:
125+
# #define OPENSSL_VERSION_NUMBER 0x1000103fL
126+
# Encoded as MNNFFPPS: major minor fix patch status
127+
FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
128+
OPENSSL_VERSION_NUMBER
129+
REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
130+
)
131+
STRING(REGEX REPLACE
132+
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
133+
OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
134+
)
135+
STRING(REGEX REPLACE
136+
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\1"
137+
OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER}"
138+
)
139+
STRING(REGEX REPLACE
140+
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\1"
141+
OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}"
142+
)
143+
ENDIF()
144+
SET(OPENSSL_VERSION
145+
"${OPENSSL_MAJOR_VERSION}.${OPENSSL_MINOR_VERSION}.${OPENSSL_FIX_VERSION}"
146+
)
147+
SET(OPENSSL_VERSION ${OPENSSL_VERSION} CACHE INTERNAL "")
148+
MESSAGE(STATUS "OPENSSL_VERSION (${WITH_SSL}) is ${OPENSSL_VERSION}")
149+
ENDMACRO(FIND_OPENSSL_VERSION)
150+
95151
# MYSQL_CHECK_SSL
96152
#
97153
# Provides the following configure options:
@@ -194,30 +250,8 @@ MACRO (MYSQL_CHECK_SSL)
194250
ENDIF()
195251

196252
IF(OPENSSL_INCLUDE_DIR)
197-
# Verify version number. Version information looks like:
198-
# #define OPENSSL_VERSION_NUMBER 0x1000103fL
199-
# Encoded as MNNFFPPS: major minor fix patch status
200-
FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
201-
OPENSSL_VERSION_NUMBER
202-
REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
203-
)
204-
STRING(REGEX REPLACE
205-
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
206-
OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
207-
)
208-
STRING(REGEX REPLACE
209-
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\1"
210-
OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER}"
211-
)
212-
STRING(REGEX REPLACE
213-
"^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\1"
214-
OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}"
215-
)
253+
FIND_OPENSSL_VERSION()
216254
ENDIF()
217-
SET(OPENSSL_VERSION
218-
"${OPENSSL_MAJOR_VERSION}.${OPENSSL_MINOR_VERSION}.${OPENSSL_FIX_VERSION}"
219-
)
220-
SET(OPENSSL_VERSION ${OPENSSL_VERSION} CACHE INTERNAL "")
221255

222256
IF("${OPENSSL_VERSION}" VERSION_GREATER "1.1.0")
223257
ADD_DEFINITIONS(-DHAVE_TLSv13)
@@ -229,7 +263,8 @@ MACRO (MYSQL_CHECK_SSL)
229263
IF(OPENSSL_INCLUDE_DIR AND
230264
OPENSSL_LIBRARY AND
231265
CRYPTO_LIBRARY AND
232-
OPENSSL_MAJOR_VERSION STREQUAL "1"
266+
(OPENSSL_MAJOR_VERSION STREQUAL "1" OR
267+
OPENSSL_MAJOR_VERSION STREQUAL "3")
233268
)
234269
SET(OPENSSL_FOUND TRUE)
235270
ELSE()
@@ -312,3 +347,16 @@ MACRO (MYSQL_CHECK_SSL)
312347
"Wrong option or path for WITH_SSL=${WITH_SSL}.")
313348
ENDIF()
314349
ENDMACRO()
350+
351+
# Downgrade OpenSSL 3 deprecation warnings.
352+
MACRO(DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS)
353+
IF(OPENSSL_MAJOR_VERSION VERSION_EQUAL 3)
354+
IF(MY_COMPILER_IS_GNU_OR_CLANG)
355+
ADD_COMPILE_FLAGS(${ARGV}
356+
COMPILE_FLAGS "-Wno-error=deprecated-declarations")
357+
ELSEIF(WIN32)
358+
ADD_COMPILE_FLAGS(${ARGV}
359+
COMPILE_FLAGS "/wd4996")
360+
ENDIF()
361+
ENDIF()
362+
ENDMACRO()

libmysql/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ SET(CLIENT_SOURCES
197197
../sql/auth/sha2_password_common.cc
198198
)
199199

200+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
201+
../sql-common/client_authentication.cc)
202+
200203
IF (WIN32 AND OPENSSL_APPLINK_C)
201204
SET_SOURCE_FILES_PROPERTIES(
202205
../sql-common/client_authentication.cc
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Allow ciphers by default treated as unsecure in OpenSSL 3.0 to allow use of
2+
# legacy TLSv1.0 and TLSv1.1.
3+
# Configuration file should also work for OpenSSL 1.1.1 but will not work with
4+
# for example OpenSSL 1.0.
5+
openssl_conf = openssl_sect
6+
[ openssl_sect ]
7+
ssl_conf = ssl_sect
8+
[ssl_sect]
9+
system_default = system_default_sect
10+
[system_default_sect]
11+
CipherString = DEFAULT:@SECLEVEL=0

mysql-test/mysql-test-run.pl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3007,6 +3007,18 @@ sub environment_setup {
30073007
my $pathsep= ":";
30083008
$pathsep= ";" if IS_WINDOWS && ! IS_CYGWIN;
30093009
$ENV{'PATH'}= "$ENV{'PATH'}".$pathsep.$perldir;
3010+
3011+
# ----------------------------------------------------
3012+
# openssl3 helper
3013+
# ----------------------------------------------------
3014+
# Provide path to openssl configuration file allowing old TLSv1.0 and TLSv1.1.
3015+
# In tests that need it add to test cnf-file:
3016+
#
3017+
# [ENV]
3018+
# [email protected]_LEGACY_TLS_CNF
3019+
#
3020+
$ENV{'OPENSSL3_LEGACY_TLS_CNF'}=
3021+
native_path(${glob_mysql_test_dir}."/include/openssl3_legacy_tls.cnf");
30103022
}
30113023

30123024

mysql-test/suite/auth_sec/t/tls.cnf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF

mysql-test/suite/rpl/t/rpl_ssl1.cnf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include ../my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF

mysys_ssl/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ IF(SSL_DEFINES)
3131
ADD_DEFINITIONS(${SSL_DEFINES})
3232
ENDIF()
3333

34+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
35+
crypt_genhash_impl.cc
36+
my_md5.cc
37+
my_sha1.cc)
38+
3439
SET(MYSYS_AES_IMPLEMENTATION my_aes_openssl.cc)
3540

3641
SET(MYSYS_SSL_SOURCES

rapid/plugin/group_replication/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ ADD_DEFINITIONS(${SSL_DEFINES})
165165
# add the definition to build XCom with SSL support
166166
ADD_DEFINITIONS(-DXCOM_HAVE_OPENSSL)
167167

168+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
169+
libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c)
168170

169171
IF(WITH_UNIT_TESTS)
170172
ADD_CONVENIENCE_LIBRARY(gr_unit_test_resource

rapid/plugin/x/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ IF(SSL_DEFINES)
2727
ADD_DEFINITIONS(${SSL_DEFINES})
2828
ENDIF()
2929

30+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
31+
mysqlxtest_src/mysql41_hash.cc)
32+
3033
# Note that no COMPONENTS option is to be used for header only components,
3134
# it would try to find a library
3235
SET(Boost_USE_STATIC_LIBS OFF)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
!include include/default_my.cnf
2+
[ENV]
3+
OPENSSL_CONF[email protected]_LEGACY_TLS_CNF

rapid/plugin/x/tests/mtr/t/connection_tls_version.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ EOF
3030
--exec $MYSQLXTEST -uroot --file=$xtest_file 2>&1
3131

3232
--let $XTESTPARAMS= -u user5_mysqlx --password='auth_string' --file=$xtest_file --ssl-cipher='DHE-RSA-AES256-SHA'
33-
--let $ERROR1= /in main, line 0:ERROR: error:00000001:lib\(0\):func\(0\):reason\(1\)/Application terminated with expected error: protocol version mismatch/
34-
--let $ERROR5= /in main, line 0:ERROR: error:00000005:lib\(0\):func\(0\):DH lib/Application terminated with expected error: socket layer receive error/ /in main, line 0:ERROR: error:00000001:lib\(0\):func\(0\):reason\(1\)/Application terminated with expected error: socket layer receive error/
33+
--let $ERROR1= /in main, line 0:ERROR: error:00000001:lib\(0\):.*:reason\(1\)/Application terminated with expected error: protocol version mismatch/
34+
--let $ERROR5= /in main, line 0:ERROR: error:00000005:lib\(0\):.*:DH lib/Application terminated with expected error: socket layer receive error/ /in main, line 0:ERROR: error:00000001:lib\(0\):.*:reason\(1\)/Application terminated with expected error: socket layer receive error/
3535

3636
--exec $MYSQLXTEST $XTESTPARAMS 2>&1
3737
--exec $MYSQLXTEST --tls-version=TLSv1,TLSv1.1,TLSv1.2 $XTESTPARAMS 2>&1

rapid/unittest/gunit/xplugin/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ MYSQLX_PROTOBUF_GENERATE_CPP_NAMES(protobuf_SRC ${PROTOBUF_MYSQLX_FILES})
4040

4141
IF(MSVC)
4242
ADD_COMPILE_FLAGS(${protobuf_SRC} COMPILE_FLAGS "/wd4018")
43+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
44+
"${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysql41_hash.cc")
45+
ELSE()
46+
# DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS macro does not work in this
47+
# directory when using GCC 4.4.7 compiler.
48+
MY_CHECK_CXX_COMPILER_FLAG("-Wno-deprecated-declarations"
49+
HAVE_NO_DEPRECATED_DECLARATIONS)
50+
IF(HAVE_NO_DEPRECATED_DECLARATIONS)
51+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
52+
ENDIF()
4353
ENDIF(MSVC)
4454

4555
# Turn off some warning flags when compiling GUnit and proto files.

sql/CMakeLists.txt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,14 @@ SET(SQL_SOURCE
302302
auth/sha2_password_common.cc
303303
)
304304

305+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
306+
${CMAKE_SOURCE_DIR}/sql-common/client_authentication.cc
307+
${CMAKE_SOURCE_DIR}/sql/auth/auth_common.h
308+
${CMAKE_SOURCE_DIR}/sql/auth/sql_authentication.cc
309+
${CMAKE_SOURCE_DIR}/sql/auth/sql_authentication.h
310+
${CMAKE_SOURCE_DIR}/sql/des_key_file.cc
311+
${CMAKE_SOURCE_DIR}/sql/item_strfunc.cc)
312+
305313
IF(NOT WIN32)
306314
LIST(APPEND SQL_SOURCE mysqld_daemon.cc)
307315
ENDIF()
@@ -557,9 +565,18 @@ IF(UNIX AND STATIC_SSL_LIBRARY)
557565
-Wl,-force_load ${OPENSSL_LIBRARY}
558566
)
559567
ELSE()
560-
TARGET_LINK_LIBRARIES(mysqld
561-
-Wl,--whole-archive ${SSL_LIBRARIES} -Wl,--no-whole-archive
562-
)
568+
# OpenSSL 3.0.8 has an issue with duplicate symbols between static crypto
569+
# and ssl libraries. See https://github.com/openssl/openssl/issues/20238
570+
IF("${OPENSSL_VERSION}" VERSION_EQUAL "3.0.8")
571+
TARGET_LINK_LIBRARIES(mysqld
572+
-Wl,--whole-archive,--allow-multiple-definition ${SSL_LIBRARIES}
573+
-Wl,--no-whole-archive
574+
)
575+
ELSE()
576+
TARGET_LINK_LIBRARIES(mysqld
577+
-Wl,--whole-archive ${SSL_LIBRARIES} -Wl,--no-whole-archive
578+
)
579+
ENDIF()
563580
ENDIF()
564581
ENDIF()
565582

vio/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ SET(VIO_SOURCES
3131
viosslfactories.c
3232
)
3333

34+
DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS(
35+
viossl.c
36+
viosslfactories.c)
37+
3438
IF(WIN32)
3539
LIST(APPEND VIO_SOURCES
3640
viopipe.c

vio/viossl.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ size_t vio_ssl_read(Vio *vio, uchar *buf, size_t size)
193193

194194
ret= SSL_read(ssl, buf, (int)size);
195195

196-
if (ret >= 0)
196+
if (ret > 0)
197197
break;
198198

199199
/* Process the SSL I/O error. */
@@ -230,7 +230,7 @@ size_t vio_ssl_write(Vio *vio, const uchar *buf, size_t size)
230230

231231
ret= SSL_write(ssl, buf, (int)size);
232232

233-
if (ret >= 0)
233+
if (ret > 0)
234234
break;
235235

236236
/* Process the SSL I/O error. */
@@ -277,6 +277,7 @@ int vio_ssl_shutdown(Vio *vio)
277277
default: /* Shutdown failed */
278278
DBUG_PRINT("vio_error", ("SSL_shutdown() failed, error: %d",
279279
SSL_get_error(ssl, r)));
280+
ERR_clear_error();
280281
break;
281282
}
282283
}
@@ -414,6 +415,7 @@ static int ssl_do(struct st_VioSSLFd *ptr, Vio *vio,
414415
}
415416
}
416417
#endif
418+
ERR_clear_error();
417419

418420
if ((r= ssl_handshake_loop(vio, ssl, func, ssl_errno_holder)) < 1)
419421
{

0 commit comments

Comments
 (0)