--- /dev/null
+--- php-5.6.40/ext/mysqlnd/mysqlnd.c.org 2019-01-09 10:54:13.000000000 +0100
++++ php-5.6.40/ext/mysqlnd/mysqlnd.c 2024-03-19 12:48:22.169953022 +0100
+@@ -599,11 +599,15 @@ mysqlnd_run_authentication(
+ struct st_mysqlnd_authentication_plugin * auth_plugin = conn->m->fetch_auth_plugin_by_name(requested_protocol TSRMLS_CC);
+
+ if (!auth_plugin) {
+- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The server requested authentication method unknown to the client [%s]", requested_protocol);
+- SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method unknown to the client");
+- goto end;
++ if (first_call) {
++ mnd_pefree(requested_protocol, FALSE);
++ requested_protocol = mnd_pestrdup(MYSQLND_DEFAULT_AUTH_PROTOCOL, FALSE);
++ } else {
++ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The server requested authentication method unknown to the client [%s]", requested_protocol);
++ SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method unknown to the client");
++ goto end;
++ }
+ }
+- DBG_INF("plugin found");
+
+ {
+ zend_uchar * switch_to_auth_protocol_data = NULL;
+@@ -628,9 +632,12 @@ mysqlnd_run_authentication(
+
+ DBG_INF_FMT("salt(%d)=[%.*s]", plugin_data_len, plugin_data_len, plugin_data);
+ /* The data should be allocated with malloc() */
+- scrambled_data =
+- auth_plugin->methods.get_auth_data(NULL, &scrambled_data_len, conn, user, passwd, passwd_len,
+- plugin_data, plugin_data_len, options, &conn->net->data->options, mysql_flags TSRMLS_CC);
++ if (auth_plugin) {
++ scrambled_data =
++ auth_plugin->methods.get_auth_data(NULL, &scrambled_data_len, conn, user, passwd, passwd_len,
++ plugin_data, plugin_data_len, options, &conn->net->data->options, mysql_flags TSRMLS_CC);
++ }
++
+ if (conn->error_info->error_no) {
+ goto end;
+ }