From 911dbe0b2989cc48ba44b8dafae4dc6bd7fe4ca6 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 21 Oct 2008 18:09:35 +0400 Subject: [PATCH] Use ObjectMgr/AccountMgr functions instead explici DB quaries. --- src/game/Level3.cpp | 25 +++++++++---------------- src/game/ObjectMgr.cpp | 13 +++++++++++++ src/game/ObjectMgr.h | 1 + src/game/World.cpp | 32 +++++++++++--------------------- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 455e19052..23c45f864 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -4835,32 +4835,25 @@ bool ChatHandler::HandleBanInfoCommand(const char* args) } else if(type == "character") { - if(!normalizePlayerName(nameOrIP)) + if (!normalizePlayerName(nameOrIP)) { - SendSysMessage(LANG_PLAYER_NOT_FOUND); - SetSentErrorMessage(true); + SendSysMessage (LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage (true); return false; } - loginDatabase.escape_string(nameOrIP); - QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", nameOrIP.c_str()); - if (!result) + accountid = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP); + if (!accountid) { - PSendSysMessage(LANG_BANINFO_NOCHARACTER); + PSendSysMessage (LANG_BANINFO_NOCHARACTER); return true; } - fields = result->Fetch(); - accountid = fields[0].GetUInt32(); - delete result; - result = loginDatabase.PQuery("SELECT username FROM account WHERE id = '%u'", accountid); - if (!result) + + if (!accmgr.GetName (accountid,accountname)) { - PSendSysMessage(LANG_BANINFO_NOCHARACTER); + PSendSysMessage (LANG_BANINFO_NOCHARACTER); return true; } - fields = result->Fetch(); - accountname = fields[0].GetCppString(); - delete result; } else return false; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 20555a3a1..dc5feee2a 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1296,6 +1296,19 @@ uint32 ObjectMgr::GetPlayerAccountIdByGUID(const uint64 &guid) const return 0; } +uint32 ObjectMgr::GetPlayerAccountIdByPlayerName(std::string name) const +{ + QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", name.c_str()); + if(result) + { + uint32 acc = (*result)[0].GetUInt32(); + delete result; + return acc; + } + + return 0; +} + void ObjectMgr::LoadAuctions() { QueryResult *result = CharacterDatabase.Query("SELECT COUNT(*) FROM auctionhouse"); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index a1711faa0..229c57e6b 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -391,6 +391,7 @@ class ObjectMgr bool GetPlayerNameByGUID(const uint64 &guid, std::string &name) const; uint32 GetPlayerTeamByGUID(const uint64 &guid) const; uint32 GetPlayerAccountIdByGUID(const uint64 &guid) const; + uint32 GetPlayerAccountIdByPlayerName(std::string name) const; uint32 GetNearestTaxiNode( float x, float y, float z, uint32 mapid ); void GetTaxiPath( uint32 source, uint32 destination, uint32 &path, uint32 &cost); diff --git a/src/game/World.cpp b/src/game/World.cpp index 7f96992c5..933695b08 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -34,6 +34,7 @@ #include "SkillExtraItems.h" #include "SkillDiscovery.h" #include "World.h" +#include "AccountMgr.h" #include "ObjectMgr.h" #include "SpellMgr.h" #include "Chat.h" @@ -2276,36 +2277,25 @@ bool World::RemoveBanAccount(std::string type, std::string nameOrIP) } else { - uint32 account=0; - if(type == "account") + uint32 account = 0; + if (type == "account") { - //NO SQL injection as name is escaped - loginDatabase.escape_string(nameOrIP); - QueryResult *resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str()); - if(!resultAccounts) + if (!AccountMgr::normilizeString (nameOrIP)) return false; - Field* fieldsAccount = resultAccounts->Fetch(); - account = fieldsAccount->GetUInt32(); - delete resultAccounts; + account = accmgr.GetId (nameOrIP); } - else if(type == "character") + else if (type == "character") { - if(!normalizePlayerName(nameOrIP)) + if (!normalizePlayerName (nameOrIP)) return false; - //NO SQL injection as name is escaped - loginDatabase.escape_string(nameOrIP); - QueryResult *resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str()); - if(!resultAccounts) - return false; - Field* fieldsAccount = resultAccounts->Fetch(); - account = fieldsAccount->GetUInt32(); - - delete resultAccounts; + account = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP); } - if(!account) + + if (!account) return false; + //NO SQL injection as account is uint32 loginDatabase.PExecute("UPDATE account_banned SET active = '0' WHERE id = '%u'",account); }