aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/World
diff options
context:
space:
mode:
authorRoc13x <roc13x@gmail.com>2018-04-18 11:32:37 +0100
committerAokromes <Aokromes@users.noreply.github.com>2018-04-18 12:32:37 +0200
commite27d7c8e8f45f87fc58886c9e7a8caf4b4c61fa1 (patch)
treea7d0676f971c848226aad56473b78c5731f1e962 /src/server/game/World
parent95475fed2e18cbba57ea7731924e28f2d80e76dd (diff)
Core/Accounts: prevent existing account ban from being updated (#21836)
Cherry-picked from fbb2b165
Diffstat (limited to 'src/server/game/World')
-rw-r--r--src/server/game/World/World.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 760ec282bd7..25ca56325cb 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -2723,6 +2723,10 @@ BanReturn World::BanAccount(BanMode mode, std::string const& nameOrIP, uint32 du
PreparedQueryResult resultAccounts = PreparedQueryResult(NULL); //used for kicking
PreparedStatement* stmt = NULL;
+ // Prevent banning an already banned account
+ if (mode == BAN_ACCOUNT && AccountMgr::IsBannedAccount(nameOrIP))
+ return BAN_EXISTS;
+
///- Update the database with ban information
switch (mode)
{
@@ -2841,17 +2845,20 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati
else
guid = pBanned->GetGUID();
+ //Use transaction in order to ensure the order of the queries
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
// make sure there is only one active ban
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN);
stmt->setUInt64(0, guid.GetCounter());
- CharacterDatabase.Execute(stmt);
+ trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_BAN);
stmt->setUInt64(0, guid.GetCounter());
stmt->setUInt32(1, duration_secs);
stmt->setString(2, author);
stmt->setString(3, reason);
- CharacterDatabase.Execute(stmt);
+ trans->Append(stmt);
+ CharacterDatabase.CommitTransaction(trans);
if (pBanned)
pBanned->GetSession()->KickPlayer();