Use ObjectMgr/AccountMgr functions instead explici DB quaries.

This commit is contained in:
VladimirMangos 2008-10-21 18:09:35 +04:00
parent 42b077df0c
commit 911dbe0b29
4 changed files with 34 additions and 37 deletions

View file

@ -4835,32 +4835,25 @@ bool ChatHandler::HandleBanInfoCommand(const char* args)
} }
else if(type == "character") else if(type == "character")
{ {
if(!normalizePlayerName(nameOrIP)) if (!normalizePlayerName(nameOrIP))
{ {
SendSysMessage(LANG_PLAYER_NOT_FOUND); SendSysMessage (LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true); SetSentErrorMessage (true);
return false; return false;
} }
loginDatabase.escape_string(nameOrIP); accountid = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", nameOrIP.c_str()); if (!accountid)
if (!result)
{ {
PSendSysMessage(LANG_BANINFO_NOCHARACTER); PSendSysMessage (LANG_BANINFO_NOCHARACTER);
return true; return true;
} }
fields = result->Fetch();
accountid = fields[0].GetUInt32(); if (!accmgr.GetName (accountid,accountname))
delete result;
result = loginDatabase.PQuery("SELECT username FROM account WHERE id = '%u'", accountid);
if (!result)
{ {
PSendSysMessage(LANG_BANINFO_NOCHARACTER); PSendSysMessage (LANG_BANINFO_NOCHARACTER);
return true; return true;
} }
fields = result->Fetch();
accountname = fields[0].GetCppString();
delete result;
} }
else else
return false; return false;

View file

@ -1296,6 +1296,19 @@ uint32 ObjectMgr::GetPlayerAccountIdByGUID(const uint64 &guid) const
return 0; 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() void ObjectMgr::LoadAuctions()
{ {
QueryResult *result = CharacterDatabase.Query("SELECT COUNT(*) FROM auctionhouse"); QueryResult *result = CharacterDatabase.Query("SELECT COUNT(*) FROM auctionhouse");

View file

@ -391,6 +391,7 @@ class ObjectMgr
bool GetPlayerNameByGUID(const uint64 &guid, std::string &name) const; bool GetPlayerNameByGUID(const uint64 &guid, std::string &name) const;
uint32 GetPlayerTeamByGUID(const uint64 &guid) const; uint32 GetPlayerTeamByGUID(const uint64 &guid) const;
uint32 GetPlayerAccountIdByGUID(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 ); uint32 GetNearestTaxiNode( float x, float y, float z, uint32 mapid );
void GetTaxiPath( uint32 source, uint32 destination, uint32 &path, uint32 &cost); void GetTaxiPath( uint32 source, uint32 destination, uint32 &path, uint32 &cost);

View file

@ -34,6 +34,7 @@
#include "SkillExtraItems.h" #include "SkillExtraItems.h"
#include "SkillDiscovery.h" #include "SkillDiscovery.h"
#include "World.h" #include "World.h"
#include "AccountMgr.h"
#include "ObjectMgr.h" #include "ObjectMgr.h"
#include "SpellMgr.h" #include "SpellMgr.h"
#include "Chat.h" #include "Chat.h"
@ -2276,36 +2277,25 @@ bool World::RemoveBanAccount(std::string type, std::string nameOrIP)
} }
else else
{ {
uint32 account=0; uint32 account = 0;
if(type == "account") if (type == "account")
{ {
//NO SQL injection as name is escaped if (!AccountMgr::normilizeString (nameOrIP))
loginDatabase.escape_string(nameOrIP);
QueryResult *resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str());
if(!resultAccounts)
return false; 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; return false;
//NO SQL injection as name is escaped account = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
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;
} }
if(!account)
if (!account)
return false; return false;
//NO SQL injection as account is uint32 //NO SQL injection as account is uint32
loginDatabase.PExecute("UPDATE account_banned SET active = '0' WHERE id = '%u'",account); loginDatabase.PExecute("UPDATE account_banned SET active = '0' WHERE id = '%u'",account);
} }