From d9ff25d06f65a63b56b963a347fd5a1c13a1d54a Mon Sep 17 00:00:00 2001 From: AconiteGodOfSWG Date: Fri, 26 Feb 2021 21:55:42 -0500 Subject: [PATCH] Add isGod checks to console command parsing --- .../shared/console/ConsoleCommandParserAi.cpp | 11 ++++++++++ .../console/ConsoleCommandParserCity.cpp | 14 ++++++++++++ .../ConsoleCommandParserCollection.cpp | 11 ++++++++++ .../console/ConsoleCommandParserCraft.cpp | 10 +++++++++ .../ConsoleCommandParserCraftStation.cpp | 11 ++++++++++ .../console/ConsoleCommandParserDefault.cpp | 15 +++++++++++++ .../console/ConsoleCommandParserGuild.cpp | 11 ++++++++++ .../ConsoleCommandParserManufacture.cpp | 11 +++++++++- .../console/ConsoleCommandParserMessageTo.cpp | 18 ++++++++++++++- .../console/ConsoleCommandParserMoney.cpp | 12 ++++++++++ .../console/ConsoleCommandParserNpc.cpp | 11 ++++++++++ .../console/ConsoleCommandParserObject.cpp | 8 +++++++ .../console/ConsoleCommandParserObjvar.cpp | 11 ++++++++++ .../console/ConsoleCommandParserPvp.cpp | 11 ++++++++++ .../console/ConsoleCommandParserResource.cpp | 12 ++++++++++ .../console/ConsoleCommandParserServer.cpp | 22 +++++++++++++++++++ .../console/ConsoleCommandParserShip.cpp | 12 ++++++++++ .../console/ConsoleCommandParserSkill.cpp | 16 ++++++++++++-- .../console/ConsoleCommandParserSpaceAi.cpp | 12 ++++++++++ .../console/ConsoleCommandParserSpawner.cpp | 15 ++++++++++++- .../console/ConsoleCommandParserVeteran.cpp | 14 ++++++++++++ .../console/ConsoleCommandParserVoice.cpp | 16 ++++++++++++-- 22 files changed, 277 insertions(+), 7 deletions(-) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserAi.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserAi.cpp index 994b695b..ade32b45 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserAi.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserAi.cpp @@ -107,6 +107,17 @@ bool ConsoleCommandParserAi::performParsing(const NetworkId & userId, const Stri UNREF (userId); UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + FormattedString<1024> fs; if (isAbbrev(argv[0], "log")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCity.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCity.cpp index 5a89f47e..a1c31dbb 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCity.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCity.cpp @@ -14,6 +14,9 @@ #include "serverGame/CityInterface.h" #include "serverGame/CityStructureInfo.h" #include "serverGame/GameServer.h" +#include "serverGame/CreatureObject.h" +#include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" #include "sharedFoundation/CalendarTime.h" #include "sharedFoundation/FormattedString.h" #include "sharedFoundation/NetworkId.h" @@ -67,6 +70,17 @@ bool ConsoleCommandParserCity::performParsing (const NetworkId & userId, const S UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isCommand(argv [0], "listById")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCollection.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCollection.cpp index 7397c1e8..a8ef94a9 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCollection.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCollection.cpp @@ -57,6 +57,17 @@ bool ConsoleCommandParserCollection::performParsing (const NetworkId & userId, c UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + // ---------------------------------------------------------------------- if (isCommand (argv [0], "adjustSlotValue")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraft.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraft.cpp index 51b45c94..e75667cc 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraft.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraft.cpp @@ -55,6 +55,16 @@ bool ConsoleCommandParserCraft::performParsing (const NetworkId & userId, const CreatureObject * creatureObject = safe_cast(ServerWorld::findObjectByNetworkId(userId)); PlayerObject * playerObject = const_cast(PlayerCreatureController::getPlayerObject(creatureObject)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev( argv [0], "draft")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraftStation.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraftStation.cpp index e3a443db..bced5418 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraftStation.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserCraftStation.cpp @@ -45,6 +45,17 @@ bool ConsoleCommandParserCraftStation::performParsing (const NetworkId & userId, UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + // CreatureObject * playerObject = safe_cast(ServerWorld::findObjectByNetworkId(userId)); //----------------------------------------------------------------- diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserDefault.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserDefault.cpp index 431fb622..8e87bae0 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserDefault.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserDefault.cpp @@ -8,6 +8,10 @@ #include "serverGame/FirstServerGame.h" #include "serverGame/ConsoleCommandParserDefault.h" +#include "serverGame/CreatureObject.h" +#include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" + #include "serverGame/Chat.h" #include "sharedFoundation/NetworkId.h" @@ -120,6 +124,17 @@ bool ConsoleCommandParserDefault::performParsing (const NetworkId & userId, cons UNREF (originalCommand); UNREF (userId); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev( argv [0], "serverhelp")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserGuild.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserGuild.cpp index 3484d6c2..5e2ae9a7 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserGuild.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserGuild.cpp @@ -76,6 +76,17 @@ bool ConsoleCommandParserGuild::performParsing (const NetworkId & userId, const UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isCommand(argv [0], "listById")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserManufacture.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserManufacture.cpp index d8af83e3..93a066db 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserManufacture.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserManufacture.cpp @@ -52,7 +52,16 @@ bool ConsoleCommandParserManufacture::performParsing (const NetworkId & userId, NOT_NULL (node); UNREF(originalCommand); - CreatureObject * playerObject = safe_cast(ServerWorld::findObjectByNetworkId(userId)); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } //----------------------------------------------------------------- diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMessageTo.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMessageTo.cpp index 7e7c8959..afeb2b54 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMessageTo.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMessageTo.cpp @@ -8,6 +8,9 @@ #include "serverGame/FirstServerGame.h" #include "serverGame/ConsoleCommandParserMessageTo.h" +#include "serverGame/CreatureObject.h" +#include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" #include "UnicodeUtils.h" #include "serverGame/MessageToQueue.h" #include "serverGame/ServerObject.h" @@ -34,8 +37,21 @@ ConsoleCommandParserMessageTo::ConsoleCommandParserMessageTo() : //----------------------------------------------------------------------- -bool ConsoleCommandParserMessageTo::performParsing (const NetworkId & /*userId*/, const StringVector_t & argv, const String_t & /* originalMessage */, String_t & result, const CommandParser *) +bool ConsoleCommandParserMessageTo::performParsing (const NetworkId & userId, const StringVector_t & argv, const String_t & /* originalMessage */, String_t & result, const CommandParser *) { + + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + + if (isCommand( argv [0], "viewLastKnownLocations")) { result += Unicode::narrowToWide(MessageToQueue::getInstance().debugGetLastKnownLocations()); diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMoney.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMoney.cpp index feff5d1e..7b919c8d 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMoney.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserMoney.cpp @@ -13,6 +13,7 @@ #include "serverGame/PlayerCreatureController.h" #include "serverGame/PlayerObject.h" #include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" #include "sharedFoundation/FormattedString.h" #include "sharedObject/NetworkIdManager.h" #include "UnicodeUtils.h" @@ -52,6 +53,17 @@ bool ConsoleCommandParserMoney::performParsing (const NetworkId & userId, const UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev( argv [0], "cashTransfer")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserNpc.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserNpc.cpp index 71f81106..bbc99643 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserNpc.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserNpc.cpp @@ -44,6 +44,17 @@ bool ConsoleCommandParserNpc::performParsing (const NetworkId & userId, const St UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev( argv [0], "hail")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObject.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObject.cpp index eafa6994..9ae54ff5 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObject.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObject.cpp @@ -501,6 +501,10 @@ bool ConsoleCommandParserObject::performParsing (const NetworkId & userId, const WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); return false; } + + if (!playerObject->getClient()->isGod()) { + return false; + } UNREF(originalCommand); @@ -2230,6 +2234,10 @@ bool ConsoleCommandParserObject::performParsing2(const NetworkId & userId, const return false; } + if (!playerObject->getClient()->isGod()) { + return false; + } + UNREF(originalCommand); if(isCommand(argv[0], "getObservers")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObjvar.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObjvar.cpp index 77063e84..3c8856a1 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObjvar.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserObjvar.cpp @@ -94,6 +94,17 @@ bool ConsoleCommandParserObjvar::performParsing (const NetworkId & userId, const UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev( argv [0], "set")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserPvp.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserPvp.cpp index a9f691b6..e53737d8 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserPvp.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserPvp.cpp @@ -73,6 +73,17 @@ bool ConsoleCommandParserPvp::performParsing (const NetworkId & userId, const St UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + // ---------------------------------------------------------------------- if (isCommand (argv [0], "showGcwRankTable")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserResource.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserResource.cpp index cde60a8e..03f79d34 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserResource.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserResource.cpp @@ -17,6 +17,7 @@ #include "serverGame/ServerUniverse.h" #include "serverGame/ServerWorld.h" #include "serverGame/SurveySystem.h" +#include "serverGame/CreatureObject.h" #include "sharedFoundation/GameControllerMessage.h" #include "sharedFoundation/NetworkId.h" #include "sharedObject/Controller.h" @@ -66,6 +67,17 @@ bool ConsoleCommandParserResource::performParsing (const NetworkId & userId, con UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isCommand( argv [0], "activate")) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserServer.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserServer.cpp index b65eb5e7..63d8fb1d 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserServer.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserServer.cpp @@ -220,6 +220,17 @@ bool ConsoleCommandParserServer::performParsing(const NetworkId & userId, const ServerObject * user = safe_cast(NetworkIdManager::getObjectById(userId)); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //----------------------------------------------------------------- if (isAbbrev(argv[0], ms_testStructurePlacement)) @@ -1002,6 +1013,17 @@ bool ConsoleCommandParserServer::performParsing2(const NetworkId & userId, const ServerObject * user = safe_cast(NetworkIdManager::getObjectById(userId)); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + if (isAbbrev(argv[0], "destroyPersistedBuildoutAreaDuplicates")) { ServerBuildoutManager::destroyPersistedDuplicates(); diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserShip.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserShip.cpp index 3fc8ad7d..ef2ba865 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserShip.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserShip.cpp @@ -102,6 +102,18 @@ bool ConsoleCommandParserShip::performParsing (const NetworkId & userId, const S if (!user) return false; + + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + // ---------------------------------------------------------------- if (isCommand (argv[0], CommandNames::getSlotList)) diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSkill.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSkill.cpp index 3b356f42..54e1bd14 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSkill.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSkill.cpp @@ -92,8 +92,20 @@ CommandParser ("skill", 0, "...", "Skill related commands.", 0) bool ConsoleCommandParserSkill::performParsing (const NetworkId & userId, const StringVector_t & argv, const String_t & , String_t & result, const CommandParser *) -{ - // ---------------------------------------------------------------- +{ + + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + + // ---------------------------------------------------------------- if (isCommand (argv[0], CommandNames::grantSkill)) { diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpaceAi.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpaceAi.cpp index 0964cdac..345dd935 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpaceAi.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpaceAi.cpp @@ -18,6 +18,7 @@ #include "serverGame/CreatureObject.h" #include "serverGame/SpacePath.h" #include "serverGame/SpaceAttackSquad.h" +#include "serverGame/ServerWorld.h" #include "sharedFoundation/FormattedString.h" #include "sharedFoundation/NetworkId.h" #include "sharedGame/AiDebugString.h" @@ -61,6 +62,17 @@ bool ConsoleCommandParserSpaceAi::performParsing(const NetworkId & userId, const UNREF (userId); UNREF(originalCommand); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + if (isAbbrev(argv[0], "war")) { AiShipController::setAttackingEnabled(true); diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpawner.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpawner.cpp index 0bb4706e..082276ca 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpawner.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserSpawner.cpp @@ -10,6 +10,8 @@ #include "UnicodeUtils.h" #include "serverGame/CreatureObject.h" +#include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" #include #include @@ -46,9 +48,20 @@ CommandParser ("Spawner", 0, "...", "Spawner related commands.", 0) //---------------------------------------------------------------------- -bool ConsoleCommandParserSpawner::performParsing (const NetworkId &, const StringVector_t & argv, const String_t & , String_t & result, const CommandParser *) +bool ConsoleCommandParserSpawner::performParsing (const NetworkId & userId, const StringVector_t & argv, const String_t & , String_t & result, const CommandParser *) { // ---------------------------------------------------------------- + + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } if (isCommand (argv[0], CommandNames::showQueue)) { diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVeteran.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVeteran.cpp index 3b91f7f0..740edd57 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVeteran.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVeteran.cpp @@ -10,9 +10,11 @@ #include "UnicodeUtils.h" #include "serverGame/ConfigServerGame.h" +#include "serverGame/CreatureObject.h" #include "serverGame/GameServer.h" #include "serverGame/ServerMessageForwarding.h" #include "serverGame/ServerObject.h" +#include "serverGame/ServerWorld.h" #include "serverGame/VeteranRewardManager.h" #include "sharedNetworkMessages/GenericValueTypeMessage.h" #include "sharedObject/NetworkIdManager.h" @@ -38,6 +40,18 @@ ConsoleCommandParserVeteran::ConsoleCommandParserVeteran() : bool ConsoleCommandParserVeteran::performParsing (const NetworkId & userId, const StringVector_t & argv, const String_t & /* originalMessage */, String_t & result, const CommandParser *) { + + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + if (isCommand( argv [0], "getRewardInfo")) { NetworkId targetPlayer(Unicode::wideToNarrow (argv[1])); diff --git a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVoice.cpp b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVoice.cpp index 50fee94b..16025ee1 100755 --- a/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVoice.cpp +++ b/engine/server/library/serverGame/src/shared/console/ConsoleCommandParserVoice.cpp @@ -11,8 +11,9 @@ #include "serverGame/Chat.h" #include "sharedLog/Log.h" //#include "serverGame/PlayerCreatureController.h" -//#include "serverGame/PlayerObject.h" -//#include "serverGame/ServerWorld.h" +#include "serverGame/PlayerObject.h" +#include "serverGame/CreatureObject.h" +#include "serverGame/ServerWorld.h" #include "sharedNetworkMessages/VoiceChatMiscMessages.h" @@ -51,6 +52,17 @@ bool ConsoleCommandParserVoice::performParsing (const NetworkId & userId, const UNREF(originalCommand); UNREF(userId); + CreatureObject * const playerObject = dynamic_cast(ServerWorld::findObjectByNetworkId(userId)); + if (!playerObject) + { + WARNING_STRICT_FATAL(true, ("Console command executed on invalid player object %s", userId.getValueString().c_str())); + return false; + } + + if (!playerObject->getClient()->isGod()) { + return false; + } + //CreatureObject * creatureObject = safe_cast(ServerWorld::findObjectByNetworkId(userId)); //PlayerObject * playerObject = const_cast(PlayerCreatureController::getPlayerObject(creatureObject));