MXS-2335: Fix lower_case_table_names

The database check always used the case-sensitive SQL to check that the
database exists.
This commit is contained in:
Markus Mäkelä
2019-02-18 13:03:44 +02:00
parent 966787e119
commit 8a0b6005a4
2 changed files with 9 additions and 4 deletions

View File

@ -244,17 +244,20 @@ static int database_cb(void *data, int columns, char** rows, char** row_names)
return 0; return 0;
} }
static bool check_database(sqlite3 *handle, const char *database) static bool check_database(MYSQL_AUTH* instance, sqlite3 *handle, const char *database)
{ {
bool rval = true; bool rval = true;
if (*database) if (*database)
{ {
rval = false; rval = false;
size_t len = sizeof(mysqlauth_validate_database_query) + strlen(database) + 1; const char* query = instance->lower_case_table_names ?
mysqlauth_validate_database_query_lower :
mysqlauth_validate_database_query;
size_t len = strlen(query) + strlen(database) + 1;
char sql[len]; char sql[len];
sprintf(sql, mysqlauth_validate_database_query, database); sprintf(sql, query, database);
char *err; char *err;
@ -363,7 +366,7 @@ int validate_mysql_user(MYSQL_AUTH* instance, DCB *dcb, MYSQL_session *session,
scramble, scramble_len, session->client_sha1)) scramble, scramble_len, session->client_sha1))
{ {
/** Password is OK, check that the database exists */ /** Password is OK, check that the database exists */
if (check_database(handle, session->db)) if (check_database(instance, handle, session->db))
{ {
rval = MXS_AUTH_SUCCEEDED; rval = MXS_AUTH_SUCCEEDED;
} }

View File

@ -81,6 +81,8 @@ static const char mysqlauth_skip_auth_query[] =
/** Query that checks that the database exists */ /** Query that checks that the database exists */
static const char mysqlauth_validate_database_query[] = static const char mysqlauth_validate_database_query[] =
"SELECT * FROM " MYSQLAUTH_DATABASES_TABLE_NAME " WHERE db = '%s' LIMIT 1"; "SELECT * FROM " MYSQLAUTH_DATABASES_TABLE_NAME " WHERE db = '%s' LIMIT 1";
static const char mysqlauth_validate_database_query_lower[] =
"SELECT * FROM " MYSQLAUTH_DATABASES_TABLE_NAME " WHERE LOWER(db) = LOWER('%s') LIMIT 1";
/** Delete query used to clean up the database before loading new users */ /** Delete query used to clean up the database before loading new users */
static const char delete_users_query[] = "DELETE FROM " MYSQLAUTH_USERS_TABLE_NAME; static const char delete_users_query[] = "DELETE FROM " MYSQLAUTH_USERS_TABLE_NAME;