Commit 1c9002cf authored by Georg Richter's avatar Georg Richter Committed by Oleksandr Byelkin

Remove CLIENT_SSL_VERIFY_SERVER_CERT

Since TLS server certificate verification is a client
only option, this flag is removed in both client (C/C)
and MariaDB server capability flags.

This patch reverts commit 89d759b9
(MySQL Bug #21543) and stores the server certificate validation
option in mysql->options.extensions.
parent 73c9415e
...@@ -275,7 +275,7 @@ enum enum_indicator_type ...@@ -275,7 +275,7 @@ enum enum_indicator_type
#define CLIENT_DEPRECATE_EOF (1ULL << 24) #define CLIENT_DEPRECATE_EOF (1ULL << 24)
#define CLIENT_PROGRESS_OBSOLETE (1ULL << 29) #define CLIENT_PROGRESS_OBSOLETE (1ULL << 29)
#define CLIENT_SSL_VERIFY_SERVER_CERT (1ULL << 30) #define CLIENT_SSL_VERIFY_SERVER_CERT_OBSOLETE (1ULL << 30)
/* /*
It used to be that if mysql_real_connect() failed, it would delete any It used to be that if mysql_real_connect() failed, it would delete any
options set by the client, unless the CLIENT_REMEMBER_OPTIONS flag was options set by the client, unless the CLIENT_REMEMBER_OPTIONS flag was
...@@ -326,7 +326,6 @@ enum enum_indicator_type ...@@ -326,7 +326,6 @@ enum enum_indicator_type
CLIENT_MULTI_STATEMENTS | \ CLIENT_MULTI_STATEMENTS | \
CLIENT_MULTI_RESULTS | \ CLIENT_MULTI_RESULTS | \
CLIENT_PS_MULTI_RESULTS | \ CLIENT_PS_MULTI_RESULTS | \
CLIENT_SSL_VERIFY_SERVER_CERT | \
CLIENT_REMEMBER_OPTIONS | \ CLIENT_REMEMBER_OPTIONS | \
MARIADB_CLIENT_PROGRESS | \ MARIADB_CLIENT_PROGRESS | \
CLIENT_PLUGIN_AUTH | \ CLIENT_PLUGIN_AUTH | \
...@@ -343,9 +342,8 @@ enum enum_indicator_type ...@@ -343,9 +342,8 @@ enum enum_indicator_type
If any of the optional flags is supported by the build it will be switched If any of the optional flags is supported by the build it will be switched
on before sending to the client during the connection handshake. on before sending to the client during the connection handshake.
*/ */
#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ #define CLIENT_BASIC_FLAGS ((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \
& ~CLIENT_COMPRESS) \ & ~CLIENT_COMPRESS)
& ~CLIENT_SSL_VERIFY_SERVER_CERT)
/** /**
Is raised when a multi-statement transaction Is raised when a multi-statement transaction
......
...@@ -44,6 +44,7 @@ struct st_mysql_options_extention { ...@@ -44,6 +44,7 @@ struct st_mysql_options_extention {
struct mysql_async_context *async_context; struct mysql_async_context *async_context;
HASH connection_attributes; HASH connection_attributes;
size_t connection_attributes_length; size_t connection_attributes_length;
my_bool tls_verify_server_cert;
}; };
typedef struct st_mysql_methods typedef struct st_mysql_methods
......
...@@ -2093,7 +2093,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio, ...@@ -2093,7 +2093,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
If the server does not support ssl, we abort the connection. If the server does not support ssl, we abort the connection.
*/ */
if (mysql->options.use_ssl && if (mysql->options.use_ssl &&
(mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) && (mysql->options.extension && mysql->options.extension->tls_verify_server_cert) &&
!(mysql->server_capabilities & CLIENT_SSL)) !(mysql->server_capabilities & CLIENT_SSL))
{ {
set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate, set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate,
...@@ -2163,7 +2163,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio, ...@@ -2163,7 +2163,7 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio,
DBUG_PRINT("info", ("IO layer change done!")); DBUG_PRINT("info", ("IO layer change done!"));
/* Verify server cert */ /* Verify server cert */
if ((mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) && if ((mysql->options.extension && mysql->options.extension->tls_verify_server_cert) &&
ssl_verify_server_cert(net->vio, mysql->host, &cert_error)) ssl_verify_server_cert(net->vio, mysql->host, &cert_error))
{ {
set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate, set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate,
...@@ -3847,10 +3847,12 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) ...@@ -3847,10 +3847,12 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
mysql->options.use_thread_specific_memory= *(my_bool *) arg; mysql->options.use_thread_specific_memory= *(my_bool *) arg;
break; break;
case MYSQL_OPT_SSL_VERIFY_SERVER_CERT: case MYSQL_OPT_SSL_VERIFY_SERVER_CERT:
if (*(my_bool*) arg) if (!mysql->options.extension)
mysql->options.client_flag|= CLIENT_SSL_VERIFY_SERVER_CERT; mysql->options.extension= (struct st_mysql_options_extention *)
else my_malloc(sizeof(struct st_mysql_options_extention),
mysql->options.client_flag&= ~CLIENT_SSL_VERIFY_SERVER_CERT; MYF(MY_WME | MY_ZEROFILL));
if (mysql->options.extension)
mysql->options.extension->tls_verify_server_cert= *(my_bool*) arg;
break; break;
case MYSQL_PLUGIN_DIR: case MYSQL_PLUGIN_DIR:
EXTENSION_SET_STRING(&mysql->options, plugin_dir, arg); EXTENSION_SET_STRING(&mysql->options, plugin_dir, arg);
......
...@@ -12759,7 +12759,6 @@ static bool send_server_handshake_packet(MPVIO_EXT *mpvio, ...@@ -12759,7 +12759,6 @@ static bool send_server_handshake_packet(MPVIO_EXT *mpvio,
if (ssl_acceptor_fd) if (ssl_acceptor_fd)
{ {
thd->client_capabilities |= CLIENT_SSL; thd->client_capabilities |= CLIENT_SSL;
thd->client_capabilities |= CLIENT_SSL_VERIFY_SERVER_CERT;
} }
if (data_len) if (data_len)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment