diff --git a/maxscale-system-test/nodes.cpp b/maxscale-system-test/nodes.cpp index 25b1ab1b6..68fda7ce6 100644 --- a/maxscale-system-test/nodes.cpp +++ b/maxscale-system-test/nodes.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "envv.h" @@ -189,8 +190,14 @@ int Nodes::ssh_node(int node, const char* ssh, bool sudo) { return WEXITSTATUS(rc); } + else if (WIFSIGNALED(rc) && WTERMSIG(rc) == SIGHUP) + { + // SIGHUP appears to happen for SSH connections + return 0; + } else { + std::cout << strerror(errno) << std::endl; return 256; } } diff --git a/server/modules/authenticator/MariaDBAuth/dbusers.cc b/server/modules/authenticator/MariaDBAuth/dbusers.cc index 41364e201..531a035ca 100644 --- a/server/modules/authenticator/MariaDBAuth/dbusers.cc +++ b/server/modules/authenticator/MariaDBAuth/dbusers.cc @@ -816,23 +816,28 @@ static bool check_default_table_permissions(MYSQL* mysql, "Database name will be ignored in authentication. "); // Check whether the current user has the SHOW DATABASES privilege - if (mxs_mysql_query(mysql, - "SELECT show_db_priv FROM mysql.user " - "WHERE CONCAT(user, '@', host) = CURRENT_USER()") == 0) + if (mxs_mysql_query(mysql, "SHOW GRANTS") == 0) { - MYSQL_RES* res = mysql_use_result(mysql); - if (res) + if (MYSQL_RES* res = mysql_use_result(mysql)) { - MYSQL_ROW row = mysql_fetch_row(res); + bool found = false; - if (row && strcasecmp(row[0], "Y") != 0) + for (MYSQL_ROW row = mysql_fetch_row(res); row; row = mysql_fetch_row(res)) + { + if (strcasestr(row[0], "SHOW DATABASES")) + { + found = true; + break; + } + } + + if (!found) { MXS_WARNING("[%s] User '%s' is missing the SHOW DATABASES privilege. " "This means that MaxScale cannot see all databases and authentication can fail.", service->name(), user); } - mysql_free_result(res); } }