diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Level3.cpp | 15 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 13 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 1 | ||||
-rw-r--r-- | src/game/World.cpp | 23 |
4 files changed, 24 insertions, 28 deletions
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index bf25943ea46..64021b3708b 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -4824,25 +4824,18 @@ bool ChatHandler::HandleBanInfoCommand(const char* args) 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); 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); 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 e069ed894de..6be6307a0f1 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1365,6 +1365,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 898d82ea6ff..05d4cea1a33 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -413,6 +413,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 9fdd9580872..5b0a03740cc 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -36,6 +36,7 @@ #include "SkillExtraItems.h" #include "SkillDiscovery.h" #include "World.h" +#include "AccountMgr.h" #include "ObjectMgr.h" #include "SpellMgr.h" #include "Chat.h" @@ -2337,33 +2338,21 @@ bool World::RemoveBanAccount(std::string type, std::string nameOrIP) 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") { 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) return false; + //NO SQL injection as account is uint32 loginDatabase.PExecute("UPDATE account_banned SET active = '0' WHERE id = '%u'",account); } |