diff options
| author | Roc13x <roc13x@gmail.com> | 2018-04-18 11:32:37 +0100 |
|---|---|---|
| committer | Aokromes <Aokromes@users.noreply.github.com> | 2018-04-18 12:32:37 +0200 |
| commit | e27d7c8e8f45f87fc58886c9e7a8caf4b4c61fa1 (patch) | |
| tree | a7d0676f971c848226aad56473b78c5731f1e962 /src/server/game/World | |
| parent | 95475fed2e18cbba57ea7731924e28f2d80e76dd (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.cpp | 11 |
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(); |
