@@ -54,10 +54,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
54
54
MY_MYSQL * mysql = NULL ;
55
55
MYSQLI_RESOURCE * mysqli_resource = NULL ;
56
56
zval * object = getThis ();
57
- char * hostname = NULL , * username = NULL , * passwd = NULL , * dbname = NULL , * socket = NULL ;
58
- size_t hostname_len = 0 , username_len = 0 , passwd_len = 0 , dbname_len = 0 , socket_len = 0 ;
59
- zend_bool persistent = FALSE;
60
- zend_long port = 0 , flags = 0 ;
57
+ char * hostname = NULL , * username = NULL , * passwd = NULL , * dbname = NULL , * socket = NULL ,
58
+ * ssl_key = NULL , * ssl_cert = NULL , * ssl_ca = NULL , * ssl_capath = NULL ,
59
+ * ssl_cipher = NULL ;
60
+ size_t hostname_len = 0 , username_len = 0 , passwd_len = 0 , dbname_len = 0 , socket_len = 0 ;
61
+ zend_bool persistent = FALSE, ssl = FALSE;
62
+ zend_long port = 0 , flags = 0 ;
61
63
zend_string * hash_key = NULL ;
62
64
zend_bool new_connection = FALSE;
63
65
zend_resource * le ;
@@ -182,6 +184,33 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
182
184
183
185
goto end ;
184
186
} else {
187
+ #ifdef MYSQLI_USE_MYSQLND
188
+ if (mysql -> mysql -> data -> vio -> data -> ssl ) {
189
+ /* copy over pre-existing ssl settings so we can reuse them when reconnecting */
190
+ ssl = TRUE;
191
+
192
+ ssl_key = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_key );
193
+ ssl_cert = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_cert );
194
+ ssl_ca = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_ca );
195
+ ssl_capath = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_capath );
196
+ ssl_cipher = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_cipher );
197
+ }
198
+ #else
199
+ if (mysql -> mysql -> options .ssl_key
200
+ || mysql -> mysql -> options .ssl_cert
201
+ || mysql -> mysql -> options .ssl_ca
202
+ || mysql -> mysql -> options .ssl_capath
203
+ || mysql -> mysql -> options .ssl_cipher ) {
204
+ /* copy over pre-existing ssl settings so we can reuse them when reconnecting */
205
+ ssl = TRUE;
206
+
207
+ ssl_key = my_estrdup (mysql -> mysql -> options .ssl_key );
208
+ ssl_cert = my_estrdup (mysql -> mysql -> options .ssl_cert );
209
+ ssl_ca = my_estrdup (mysql -> mysql -> options .ssl_ca );
210
+ ssl_capath = my_estrdup (mysql -> mysql -> options .ssl_capath );
211
+ ssl_cipher = my_estrdup (mysql -> mysql -> options .ssl_cipher );
212
+ }
213
+ #endif
185
214
mysqli_close (mysql -> mysql , MYSQLI_CLOSE_IMPLICIT );
186
215
mysql -> mysql = NULL ;
187
216
}
@@ -232,8 +261,28 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
232
261
/* BC for prior to bug fix #53425 */
233
262
flags |= CLIENT_MULTI_RESULTS ;
234
263
264
+ if (ssl ) {
265
+ /* if we're here, this means previous conn was ssl, repopulate settings */
266
+ mysql_ssl_set (mysql -> mysql , ssl_key , ssl_cert , ssl_ca , ssl_capath , ssl_cipher );
267
+
268
+ my_efree (ssl_key );
269
+ my_efree (ssl_cert );
270
+ my_efree (ssl_ca );
271
+ my_efree (ssl_capath );
272
+ my_efree (ssl_cipher );
273
+ }
235
274
if (mysql_real_connect (mysql -> mysql , hostname , username , passwd , dbname , port , socket , flags ) == NULL )
236
275
#else
276
+ if (ssl ) {
277
+ /* if we're here, this means previous conn was ssl, repopulate settings */
278
+ mysql_ssl_set (mysql -> mysql , ssl_key , ssl_cert , ssl_ca , ssl_capath , ssl_cipher );
279
+
280
+ my_efree (ssl_key );
281
+ my_efree (ssl_cert );
282
+ my_efree (ssl_ca );
283
+ my_efree (ssl_capath );
284
+ my_efree (ssl_cipher );
285
+ }
237
286
if (mysqlnd_connect (mysql -> mysql , hostname , username , passwd , passwd_len , dbname , dbname_len ,
238
287
port , socket , flags , MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA ) == NULL )
239
288
#endif
0 commit comments