Skip to content

Commit

Permalink
Fix negotiaton of MySQL auth plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
johannes committed Feb 20, 2018
1 parent e88e83d commit 8f3c29a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
3 changes: 3 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ PHP NEWS
. Fixed bug #75579 (Interned strings buffer overflow may cause crash).
(Dmitry)

- myslqnd
. Fixed negotiaton of MySQL authenticaton plugin. (Johannes)

- PCRE:
. Fixed bug #74183 (preg_last_error not returning error code after error).
(Andrew Nester)
Expand Down
21 changes: 14 additions & 7 deletions ext/mysqlnd/mysqlnd.c
Original file line number Diff line number Diff line change
Expand Up @@ -596,11 +596,15 @@ mysqlnd_run_authentication(
struct st_mysqlnd_authentication_plugin * auth_plugin = conn->m->fetch_auth_plugin_by_name(requested_protocol);

if (!auth_plugin) {
php_error_docref(NULL, 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, 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;
Expand All @@ -625,9 +629,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);
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);
}

if (conn->error_info->error_no) {
goto end;
}
Expand Down

0 comments on commit 8f3c29a

Please sign in to comment.