@@ -61,10 +61,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
61
61
MY_MYSQL * mysql = NULL ;
62
62
MYSQLI_RESOURCE * mysqli_resource = NULL ;
63
63
zval * object = getThis ();
64
- char * hostname = NULL , * username = NULL , * passwd = NULL , * dbname = NULL , * socket = NULL ;
65
- size_t hostname_len = 0 , username_len = 0 , passwd_len = 0 , dbname_len = 0 , socket_len = 0 ;
66
- zend_bool persistent = FALSE;
67
- zend_long port = 0 , flags = 0 ;
64
+ char * hostname = NULL , * username = NULL , * passwd = NULL , * dbname = NULL , * socket = NULL ,
65
+ * ssl_key = NULL , * ssl_cert = NULL , * ssl_ca = NULL , * ssl_capath = NULL ,
66
+ * ssl_cipher = NULL ;
67
+ size_t hostname_len = 0 , username_len = 0 , passwd_len = 0 , dbname_len = 0 , socket_len = 0 ;
68
+ zend_bool persistent = FALSE, ssl = FALSE;
69
+ zend_long port = 0 , flags = 0 ;
68
70
zend_string * hash_key = NULL ;
69
71
zend_bool new_connection = FALSE;
70
72
zend_resource * le ;
@@ -189,6 +191,33 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
189
191
190
192
goto end ;
191
193
} else {
194
+ #ifdef MYSQLI_USE_MYSQLND
195
+ if (mysql -> mysql -> data -> vio -> data -> ssl ) {
196
+ /* copy over pre-existing ssl settings so we can reuse them when reconnecting */
197
+ ssl = TRUE;
198
+
199
+ ssl_key = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_key );
200
+ ssl_cert = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_cert );
201
+ ssl_ca = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_ca );
202
+ ssl_capath = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_capath );
203
+ ssl_cipher = my_estrdup (mysql -> mysql -> data -> vio -> data -> options .ssl_cipher );
204
+ }
205
+ #else
206
+ if (mysql -> mysql -> options .ssl_key
207
+ || mysql -> mysql -> options .ssl_cert
208
+ || mysql -> mysql -> options .ssl_ca
209
+ || mysql -> mysql -> options .ssl_capath
210
+ || mysql -> mysql -> options .ssl_cipher ) {
211
+ /* copy over pre-existing ssl settings so we can reuse them when reconnecting */
212
+ ssl = TRUE;
213
+
214
+ ssl_key = my_estrdup (mysql -> mysql -> options .ssl_key );
215
+ ssl_cert = my_estrdup (mysql -> mysql -> options .ssl_cert );
216
+ ssl_ca = my_estrdup (mysql -> mysql -> options .ssl_ca );
217
+ ssl_capath = my_estrdup (mysql -> mysql -> options .ssl_capath );
218
+ ssl_cipher = my_estrdup (mysql -> mysql -> options .ssl_cipher );
219
+ }
220
+ #endif
192
221
mysqli_close (mysql -> mysql , MYSQLI_CLOSE_IMPLICIT );
193
222
mysql -> mysql = NULL ;
194
223
}
@@ -241,8 +270,28 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
241
270
/* BC for prior to bug fix #53425 */
242
271
flags |= CLIENT_MULTI_RESULTS ;
243
272
273
+ if (ssl ) {
274
+ /* if we're here, this means previous conn was ssl, repopulate settings */
275
+ mysql_ssl_set (mysql -> mysql , ssl_key , ssl_cert , ssl_ca , ssl_capath , ssl_cipher );
276
+
277
+ my_efree (ssl_key );
278
+ my_efree (ssl_cert );
279
+ my_efree (ssl_ca );
280
+ my_efree (ssl_capath );
281
+ my_efree (ssl_cipher );
282
+ }
244
283
if (mysql_real_connect (mysql -> mysql , hostname , username , passwd , dbname , port , socket , flags ) == NULL )
245
284
#else
285
+ if (ssl ) {
286
+ /* if we're here, this means previous conn was ssl, repopulate settings */
287
+ mysql_ssl_set (mysql -> mysql , ssl_key , ssl_cert , ssl_ca , ssl_capath , ssl_cipher );
288
+
289
+ my_efree (ssl_key );
290
+ my_efree (ssl_cert );
291
+ my_efree (ssl_ca );
292
+ my_efree (ssl_capath );
293
+ my_efree (ssl_cipher );
294
+ }
246
295
if (mysqlnd_connect (mysql -> mysql , hostname , username , passwd , passwd_len , dbname , dbname_len ,
247
296
port , socket , flags , MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA ) == NULL )
248
297
#endif
0 commit comments