diff --git a/servatrice/src/servatrice_database_interface.cpp b/servatrice/src/servatrice_database_interface.cpp index 7efbd0884..029866c6a 100644 --- a/servatrice/src/servatrice_database_interface.cpp +++ b/servatrice/src/servatrice_database_interface.cpp @@ -99,7 +99,24 @@ bool Servatrice_DatabaseInterface::openDatabase() return false; } - if (isStrictModeEnabled()) { + if (sqlDatabase.driverName() != "QMYSQL") { + qCCritical(DatabaseInterfaceLog) + << poolStr + << "Error opening database: connection is not a MySQL/MariaDB database, Servatrice only " + "supports the QMYSQL driver (actual driver:" + << sqlDatabase.driverName() << ")."; + return false; + } + + bool strictModeCheckOk = false; + const bool strictModeEnabled = isStrictModeEnabled(strictModeCheckOk); + if (!strictModeCheckOk) { + qCCritical(DatabaseInterfaceLog) << poolStr + << "Error opening database: unable to determine whether MySQL/MariaDB strict " + "mode is enabled"; + return false; + } + if (strictModeEnabled) { qCCritical(DatabaseInterfaceLog) << poolStr << "Error opening database: MySQL/MariaDB strict mode is enabled, which " "breaks most Servatrice database operations. Please disable strict mode " @@ -116,14 +133,13 @@ bool Servatrice_DatabaseInterface::openDatabase() return true; } -bool Servatrice_DatabaseInterface::isStrictModeEnabled() const +bool Servatrice_DatabaseInterface::isStrictModeEnabled(bool &ok) const { - if (sqlDatabase.driverName() != "QMYSQL") { - return false; - } + ok = true; QSqlQuery query(sqlDatabase); if (!query.exec("SELECT @@GLOBAL.sql_mode")) { + ok = false; return false; } diff --git a/servatrice/src/servatrice_database_interface.h b/servatrice/src/servatrice_database_interface.h index a05d6865d..fe1adf649 100644 --- a/servatrice/src/servatrice_database_interface.h +++ b/servatrice/src/servatrice_database_interface.h @@ -32,7 +32,7 @@ private: bool checkUserIsIpBanned(const QString &ipAddress, QString &banReason, int &banSecondsRemaining); /** Must be called after checkSql and server is known to be in auth mode. */ bool checkUserIsNameBanned(QString const &userName, QString &banReason, int &banSecondsRemaining); - bool isStrictModeEnabled() const; + bool isStrictModeEnabled(bool &ok) const; protected: AuthenticationResult checkUserPassword(Server_ProtocolHandler *handler,