aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Addons
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-04-05 15:06:35 +0200
committerShauren <shauren.trinity@gmail.com>2013-04-05 15:06:35 +0200
commitd24ef896dfd9932ca8b74b5683fdda71b77f0287 (patch)
treefb40afe5e7e4e5ce47da73cafbba89690f933626 /src/server/game/Addons
parent140614b882021a33d00440f4526cae52bb28dcab (diff)
Core/PacketIO: Implemented possibility to ban client addons serverside
Diffstat (limited to 'src/server/game/Addons')
-rw-r--r--src/server/game/Addons/AddonMgr.cpp68
-rw-r--r--src/server/game/Addons/AddonMgr.h16
2 files changed, 66 insertions, 18 deletions
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp
index 86a90d4d78a..3e1180727d0 100644
--- a/src/server/game/Addons/AddonMgr.cpp
+++ b/src/server/game/Addons/AddonMgr.cpp
@@ -18,10 +18,10 @@
#include "AddonMgr.h"
#include "DatabaseEnv.h"
+#include "DBCStores.h"
#include "Log.h"
#include "Timer.h"
-
-#include <list>
+#include <openssl/md5.h>
namespace AddonMgr
{
@@ -34,6 +34,8 @@ namespace
typedef std::list<SavedAddon> SavedAddonsList;
SavedAddonsList m_knownAddons;
+
+ BannedAddonList m_bannedAddons;
}
void LoadFromDB()
@@ -41,28 +43,57 @@ void LoadFromDB()
uint32 oldMSTime = getMSTime();
QueryResult result = CharacterDatabase.Query("SELECT name, crc FROM addons");
- if (!result)
+ if (result)
{
- sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 known addons. DB table `addons` is empty!");
- return;
- }
+ uint32 count = 0;
- uint32 count = 0;
+ do
+ {
+ Field* fields = result->Fetch();
- do
- {
- Field* fields = result->Fetch();
+ std::string name = fields[0].GetString();
+ uint32 crc = fields[1].GetUInt32();
- std::string name = fields[0].GetString();
- uint32 crc = fields[1].GetUInt32();
+ m_knownAddons.push_back(SavedAddon(name, crc));
- m_knownAddons.push_back(SavedAddon(name, crc));
+ ++count;
+ }
+ while (result->NextRow());
- ++count;
+ sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
- while (result->NextRow());
+ else
+ sLog->outInfo(LOG_FILTER_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");
+ if (result)
+ {
+ uint32 count = 0;
+ uint32 dbcMaxBannedAddon = sBannedAddOnsStore.GetNumRows();
+
+ do
+ {
+ Field* fields = result->Fetch();
- sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ BannedAddon addon;
+ addon.Id = fields[0].GetUInt32() + dbcMaxBannedAddon;
+ 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->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u banned addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ }
}
void SaveAddon(AddonInfo const& addon)
@@ -91,4 +122,9 @@ SavedAddon const* GetAddonInfo(const std::string& name)
return NULL;
}
+BannedAddonList const* GetBannedAddons()
+{
+ return &m_bannedAddons;
+}
+
} // Namespace
diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h
index 4d387fcfd4c..35e24e965b5 100644
--- a/src/server/game/Addons/AddonMgr.h
+++ b/src/server/game/Addons/AddonMgr.h
@@ -21,6 +21,7 @@
#include "Define.h"
#include <string>
+#include <list>
struct AddonInfo
{
@@ -37,7 +38,7 @@ struct AddonInfo
struct SavedAddon
{
- SavedAddon(const std::string& name, uint32 crc) : Name(name)
+ SavedAddon(std::string const& name, uint32 crc) : Name(name)
{
CRC = crc;
}
@@ -46,13 +47,24 @@ struct SavedAddon
uint32 CRC;
};
-#define STANDARD_ADDON_CRC 0x4c1c776d
+struct BannedAddon
+{
+ uint32 Id;
+ uint8 NameMD5[16];
+ uint8 VersionMD5[16];
+ uint32 Timestamp;
+};
+
+#define STANDARD_ADDON_CRC 0x4C1C776D
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