diff options
| author | Shauren <shauren.trinity@gmail.com> | 2019-07-15 17:47:35 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-07-15 17:47:35 +0200 |
| commit | cd3d317ebf74c4bd2b9a806e4463e2d0ae730a3b (patch) | |
| tree | d3f30d4c45ed15a4393bf5dba23db039ac15f6cf /src/server/game/Addons | |
| parent | 37f69825c445f3c973172792e1abc0bdc9f02dde (diff) | |
Core/Addons: Improve WorldSession::ReadAddonsInfo
* Only allow built-in addons to be marked as secure
* Better protect against malformed packets
Diffstat (limited to 'src/server/game/Addons')
| -rw-r--r-- | src/server/game/Addons/AddonMgr.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Addons/AddonMgr.h | 19 |
2 files changed, 7 insertions, 22 deletions
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp index d8fd909c7fc..209e1a5663c 100644 --- a/src/server/game/Addons/AddonMgr.cpp +++ b/src/server/game/Addons/AddonMgr.cpp @@ -66,7 +66,7 @@ void LoadFromDB() TC_LOG_INFO("server.loading", ">> Loaded 0 known addons. DB table `addons` is empty!"); oldMSTime = getMSTime(); - result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons"); + result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons ORDER BY timestamp"); if (result) { uint32 count = 0; @@ -96,18 +96,16 @@ void LoadFromDB() } } -void SaveAddon(AddonInfo const& addon) +void SaveAddon(std::string const& name, uint32 publicKeyCrc) { - std::string name = addon.Name; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ADDON); stmt->setString(0, name); - stmt->setUInt32(1, addon.CRC); + stmt->setUInt32(1, publicKeyCrc); CharacterDatabase.Execute(stmt); - m_knownAddons.push_back(SavedAddon(addon.Name, addon.CRC)); + m_knownAddons.emplace_back(name, publicKeyCrc); } SavedAddon const* GetAddonInfo(const std::string& name) diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h index d6d1a6e90c9..89c4575591d 100644 --- a/src/server/game/Addons/AddonMgr.h +++ b/src/server/game/Addons/AddonMgr.h @@ -21,20 +21,7 @@ #include "Define.h" #include <string> -#include <list> - -struct AddonInfo -{ - AddonInfo(const std::string& name, uint8 enabled, uint32 crc, uint8 state, bool crcOrPubKey) - : Name(name), Enabled(enabled), CRC(crc), State(state), UsePublicKeyOrCRC(crcOrPubKey) - { } - - std::string Name; - uint8 Enabled; - uint32 CRC; - uint8 State; - bool UsePublicKeyOrCRC; -}; +#include <vector> struct SavedAddon { @@ -60,10 +47,10 @@ struct BannedAddon namespace AddonMgr { void LoadFromDB(); - void SaveAddon(AddonInfo const& addon); + void SaveAddon(std::string const& name, uint32 publicKeyCrc); SavedAddon const* GetAddonInfo(const std::string& name); - typedef std::list<BannedAddon> BannedAddonList; + typedef std::vector<BannedAddon> BannedAddonList; BannedAddonList const* GetBannedAddons(); } |
