diff options
author | Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> | 2022-05-07 11:47:16 +0200 |
---|---|---|
committer | Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> | 2022-05-07 11:47:16 +0200 |
commit | af9e2fe286e97140c40b2461bbd5d131125ac768 (patch) | |
tree | f3de60d2b14be5eb5bbbe19e437e022b10b7915f /NetConsole | |
parent | 54739a3f365b7662c80c2e104af7a3ecc8b80c15 (diff) | |
download | NorthstarLauncher-af9e2fe286e97140c40b2461bbd5d131125ac768.tar.gz NorthstarLauncher-af9e2fe286e97140c40b2461bbd5d131125ac768.zip |
RCON system improvements
* Buffers are now send properly from the game client and netconsole client (running scripts and executing command's/convar's now work properly).
* Removed 'PASS' string check on server and only rely on 'SERVERDATA_REQUEST_AUTH' enum for auth queries (should make heavy abuse even harder).
Diffstat (limited to 'NetConsole')
-rw-r--r-- | NetConsole/netconsole.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/NetConsole/netconsole.cpp b/NetConsole/netconsole.cpp index cfdd31e1..3a59c5be 100644 --- a/NetConsole/netconsole.cpp +++ b/NetConsole/netconsole.cpp @@ -95,23 +95,29 @@ void CNetCon::UserInput(void) size_t nPos = svInput.find(" "); if (!svInput.empty() && nPos > 0 && nPos < svInput.size() && nPos != svInput.size()) { - std::string svReqVal = svInput.substr(nPos + 1); - std::string svReqBuf = svInput.erase(svInput.find(" ")); + std::string svSecondArg = svInput.substr(nPos + 1); + std::string svFirstArg = svInput; + svFirstArg = svFirstArg.erase(svFirstArg.find(" ")); - if (strcmp(svReqBuf.c_str(), "PASS") == 0) // Auth with RCON server. + if (strcmp(svFirstArg.c_str(), "PASS") == 0) // Auth with RCON server. { - std::string svSerialized = this->Serialize(svReqBuf, svReqVal, cl_rcon::request_t::SERVERDATA_REQUEST_AUTH); + std::string svSerialized = this->Serialize(svSecondArg, "", cl_rcon::request_t::SERVERDATA_REQUEST_AUTH); this->Send(svSerialized); } - else // This is a ConVar. + else if (strcmp(svFirstArg.c_str(), "SET") == 0) // Set value query. { - std::string svSerialized = this->Serialize(svReqBuf, svReqVal, cl_rcon::request_t::SERVERDATA_REQUEST_SETVALUE); + std::string svSerialized = this->Serialize(svFirstArg, svSecondArg, cl_rcon::request_t::SERVERDATA_REQUEST_SETVALUE); + this->Send(svSerialized); + } + else // Execute command query. + { + std::string svSerialized = this->Serialize(svInput.c_str(), "", cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND); this->Send(svSerialized); } } - else // This is a ConCommand. + else // Single arg command query. { - std::string svSerialized = this->Serialize(svInput, "", cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND); + std::string svSerialized = this->Serialize(svInput.c_str(), "", cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND); this->Send(svSerialized); } } |