@@ -69,8 +69,12 @@ static ID intern_brackets, intern_merge, intern_merge_bang, intern_new_with_args
69
69
#endif
70
70
71
71
/*
72
- * compatibility with mysql-connector-c 6.1.x, and with MySQL 5.7.3 - 5.7.10.
72
+ * compatibility with mysql-connector-c 6.1.x, MySQL 5.7.3 - 5.7.10 & with MariaDB 10.x and later .
73
73
*/
74
+ #ifdef HAVE_CONST_MYSQL_OPT_SSL_VERIFY_SERVER_CERT
75
+ #define SSL_MODE_VERIFY_IDENTITY 5
76
+ #define HAVE_CONST_SSL_MODE_VERIFY_IDENTITY
77
+ #endif
74
78
#ifdef HAVE_CONST_MYSQL_OPT_SSL_ENFORCE
75
79
#define SSL_MODE_DISABLED 1
76
80
#define SSL_MODE_REQUIRED 3
@@ -121,19 +125,27 @@ static VALUE rb_set_ssl_mode_option(VALUE self, VALUE setting) {
121
125
rb_warn ( "Your mysql client library does not support setting ssl_mode; full support comes with 5.7.11." );
122
126
return Qnil ;
123
127
}
124
- #ifdef HAVE_CONST_MYSQL_OPT_SSL_ENFORCE
128
+ #if defined( HAVE_CONST_MYSQL_OPT_SSL_VERIFY_SERVER_CERT ) || defined( HAVE_CONST_MYSQL_OPT_SSL_ENFORCE )
125
129
GET_CLIENT (self );
126
130
int val = NUM2INT ( setting );
127
- // Either MySQL 5.7.3 - 5.7.10, or Connector/C 6.1.3 - 6.1.x, or MariaDB 10.x
128
- if ((version >= 50703 && version < 50711 ) || (version >= 60103 && version < 60200 ) || (version >= 100000 && version < 110000 )) {
131
+ // Either MySQL 5.7.3 - 5.7.10, or Connector/C 6.1.3 - 6.1.x, or MariaDB 10.x and later
132
+ if ((version >= 50703 && version < 50711 ) || (version >= 60103 && version < 60200 ) || version >= 100000 ) {
133
+ #ifdef HAVE_CONST_MYSQL_OPT_SSL_VERIFY_SERVER_CERT
134
+ if (val == SSL_MODE_VERIFY_IDENTITY ) {
135
+ my_bool b = 1 ;
136
+ int result = mysql_options ( wrapper -> client , MYSQL_OPT_SSL_VERIFY_SERVER_CERT , & b );
137
+ return INT2NUM (result );
138
+ }
139
+ #endif
140
+ #ifdef HAVE_CONST_MYSQL_OPT_SSL_ENFORCE
129
141
if (val == SSL_MODE_DISABLED || val == SSL_MODE_REQUIRED ) {
130
142
my_bool b = ( val == SSL_MODE_REQUIRED );
131
143
int result = mysql_options ( wrapper -> client , MYSQL_OPT_SSL_ENFORCE , & b );
132
144
return INT2NUM (result );
133
- } else {
134
- rb_warn ( "MySQL client libraries between 5.7.3 and 5.7.10 only support SSL_MODE_DISABLED and SSL_MODE_REQUIRED" );
135
- return Qnil ;
136
145
}
146
+ #endif
147
+ rb_warn ( "Your mysql client library does not support ssl_mode %d." , val );
148
+ return Qnil ;
137
149
} else {
138
150
rb_warn ( "Your mysql client library does not support ssl_mode as expected." );
139
151
return Qnil ;
@@ -151,6 +163,7 @@ static VALUE rb_set_ssl_mode_option(VALUE self, VALUE setting) {
151
163
return INT2NUM (result );
152
164
#endif
153
165
#ifdef NO_SSL_MODE_SUPPORT
166
+ rb_warn ( "Your mysql client library does not support setting ssl_mode; full support comes with 5.7.11." );
154
167
return Qnil ;
155
168
#endif
156
169
}
@@ -1676,10 +1689,15 @@ void init_mysql2_client() {
1676
1689
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_REQUIRED" ), INT2NUM (SSL_MODE_REQUIRED ));
1677
1690
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_VERIFY_CA" ), INT2NUM (SSL_MODE_VERIFY_CA ));
1678
1691
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_VERIFY_IDENTITY" ), INT2NUM (SSL_MODE_VERIFY_IDENTITY ));
1679
- #elif defined(HAVE_CONST_MYSQL_OPT_SSL_ENFORCE ) // MySQL 5.7.3 - 5.7.10
1692
+ #else
1693
+ #ifdef HAVE_CONST_MYSQL_OPT_SSL_VERIFY_SERVER_CERT // MySQL 5.7.3 - 5.7.10 & MariaDB 10.x and later
1694
+ rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_VERIFY_IDENTITY" ), INT2NUM (SSL_MODE_VERIFY_IDENTITY ));
1695
+ #endif
1696
+ #ifdef HAVE_CONST_MYSQL_OPT_SSL_ENFORCE // MySQL 5.7.3 - 5.7.10 & MariaDB 10.x and later
1680
1697
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_DISABLED" ), INT2NUM (SSL_MODE_DISABLED ));
1681
1698
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_REQUIRED" ), INT2NUM (SSL_MODE_REQUIRED ));
1682
1699
#endif
1700
+ #endif
1683
1701
1684
1702
#ifndef HAVE_CONST_SSL_MODE_DISABLED
1685
1703
rb_const_set (cMysql2Client , rb_intern ("SSL_MODE_DISABLED" ), INT2NUM (0 ));
0 commit comments