diff options
author | Yehonal <yehonal.azeroth@gmail.com> | 2017-09-18 03:17:54 +0200 |
---|---|---|
committer | Yehonal <yehonal.azeroth@gmail.com> | 2017-09-18 03:17:54 +0200 |
commit | 627f8412d1ef03b83a9c66155cb3cdb2b59a871c (patch) | |
tree | 5a9dfd0bc345658f9328f762d42ceba2e5cbaa1b | |
parent | bea6f6b9fb9c9a4cb1a86e2bd6124c272ce52a10 (diff) | |
parent | 2c9b2542d6f63332b89f650c3cc083b33f04574b (diff) |
Merge branch 'master' of https://github.com/azerothcore/azerothcore-wotlk
-rw-r--r-- | data/sql/base/db_characters/banned_addons.sql | 24 | ||||
-rw-r--r-- | data/sql/updates/pending_db_characters/rev_1505652328111029300.sql | 25 | ||||
-rw-r--r-- | modules/acore/game-framework/src/Addons/AddonMgr.cpp | 38 | ||||
-rw-r--r-- | modules/acore/game-framework/src/Addons/AddonMgr.h | 12 | ||||
-rw-r--r-- | src/game/Server/WorldSession.cpp | 11 |
5 files changed, 108 insertions, 2 deletions
diff --git a/data/sql/base/db_characters/banned_addons.sql b/data/sql/base/db_characters/banned_addons.sql new file mode 100644 index 0000000000..e1835bcb6b --- /dev/null +++ b/data/sql/base/db_characters/banned_addons.sql @@ -0,0 +1,24 @@ +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `banned_addons`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `banned_addons` ( + `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `Name` varchar(255) NOT NULL, + `Version` varchar(255) NOT NULL DEFAULT '', + `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`Id`), + UNIQUE KEY `idx_name_ver` (`Name`, `Version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + diff --git a/data/sql/updates/pending_db_characters/rev_1505652328111029300.sql b/data/sql/updates/pending_db_characters/rev_1505652328111029300.sql new file mode 100644 index 0000000000..56cd50f945 --- /dev/null +++ b/data/sql/updates/pending_db_characters/rev_1505652328111029300.sql @@ -0,0 +1,25 @@ +INSERT INTO version_db_characters (`sql_rev`) VALUES ('1505652328111029300'); + +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `banned_addons`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `banned_addons` ( + `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `Name` varchar(255) NOT NULL, + `Version` varchar(255) NOT NULL DEFAULT '', + `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`Id`), + UNIQUE KEY `idx_name_ver` (`Name`, `Version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
\ No newline at end of file diff --git a/modules/acore/game-framework/src/Addons/AddonMgr.cpp b/modules/acore/game-framework/src/Addons/AddonMgr.cpp index 7951e9815a..a8bcdc875e 100644 --- a/modules/acore/game-framework/src/Addons/AddonMgr.cpp +++ b/modules/acore/game-framework/src/Addons/AddonMgr.cpp @@ -10,6 +10,7 @@ #include "Timer.h" #include <list> +#include <openssl/md5.h> namespace AddonMgr { @@ -22,6 +23,7 @@ namespace typedef std::list<SavedAddon> SavedAddonsList; SavedAddonsList m_knownAddons; + BannedAddonList m_bannedAddons; } void LoadFromDB() @@ -52,7 +54,36 @@ void LoadFromDB() while (result->NextRow()); sLog->outString(">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); - sLog->outString(); + + oldMSTime = getMSTime(); + result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons"); + if (result) + { + uint32 count = 0; + uint32 offset = 102; + + do + { + Field* fields = result->Fetch(); + + BannedAddon addon; + addon.Id = fields[0].GetUInt32() + offset; + addon.Timestamp = uint32(fields[3].GetUInt64()); + + std::string name = fields[1].GetString(); + std::string version = fields[2].GetString(); + + MD5(reinterpret_cast<uint8 const*>(name.c_str()), name.length(), addon.NameMD5); + MD5(reinterpret_cast<uint8 const*>(version.c_str()), version.length(), addon.VersionMD5); + + m_bannedAddons.push_back(addon); + + ++count; + } while (result->NextRow()); + + sLog->outString(">> Loaded %u banned addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + sLog->outString(); + } } void SaveAddon(AddonInfo const& addon) @@ -81,4 +112,9 @@ SavedAddon const* GetAddonInfo(const std::string& name) return NULL; } +BannedAddonList const* GetBannedAddons() +{ + return &m_bannedAddons; +} + } // Namespace diff --git a/modules/acore/game-framework/src/Addons/AddonMgr.h b/modules/acore/game-framework/src/Addons/AddonMgr.h index 04f190891f..24113ff8a5 100644 --- a/modules/acore/game-framework/src/Addons/AddonMgr.h +++ b/modules/acore/game-framework/src/Addons/AddonMgr.h @@ -9,6 +9,7 @@ #include "Define.h" #include <string> +#include <list> struct AddonInfo { @@ -33,6 +34,14 @@ struct SavedAddon uint32 CRC; }; +struct BannedAddon +{ + uint32 Id; + uint8 NameMD5[16]; + uint8 VersionMD5[16]; + uint32 Timestamp; +}; + #define STANDARD_ADDON_CRC 0x4c1c776d namespace AddonMgr @@ -40,6 +49,9 @@ namespace AddonMgr void LoadFromDB(); void SaveAddon(AddonInfo const& addon); SavedAddon const* GetAddonInfo(const std::string& name); + + typedef std::list<BannedAddon> BannedAddonList; + BannedAddonList const* GetBannedAddons(); } #endif diff --git a/src/game/Server/WorldSession.cpp b/src/game/Server/WorldSession.cpp index 883841c0ad..a92ee83563 100644 --- a/src/game/Server/WorldSession.cpp +++ b/src/game/Server/WorldSession.cpp @@ -1077,7 +1077,16 @@ void WorldSession::SendAddonsInfo() m_addonsList.clear(); - data << uint32(0); // count for an unknown for loop + AddonMgr::BannedAddonList const* bannedAddons = AddonMgr::GetBannedAddons(); + data << uint32(bannedAddons->size()); + for (AddonMgr::BannedAddonList::const_iterator itr = bannedAddons->begin(); itr != bannedAddons->end(); ++itr) + { + data << uint32(itr->Id); + data.append(itr->NameMD5, sizeof(itr->NameMD5)); + data.append(itr->VersionMD5, sizeof(itr->VersionMD5)); + data << uint32(itr->Timestamp); + data << uint32(1); // IsBanned + } SendPacket(&data); } |