diff options
author | Sadie Powell <sadie@witchery.services> | 2025-02-12 15:39:41 +0000 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2025-02-12 15:39:41 +0000 |
commit | 3e986b215e45c2fa15d1b07da8fef19e3560e45b (patch) | |
tree | ef0f6e3fef01987dc53596b14d7ede5a65834439 /modules/operserv/os_shutdown.cpp | |
parent | 8486962fefb85c810f77a42e15e51d68af93c6ef (diff) |
Add extra protections to avoid rebooting the wrong network.
Diffstat (limited to 'modules/operserv/os_shutdown.cpp')
-rw-r--r-- | modules/operserv/os_shutdown.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/modules/operserv/os_shutdown.cpp b/modules/operserv/os_shutdown.cpp index c220bac87..5ebdb2200 100644 --- a/modules/operserv/os_shutdown.cpp +++ b/modules/operserv/os_shutdown.cpp @@ -15,13 +15,23 @@ class CommandOSQuit final : public Command { public: - CommandOSQuit(Module *creator) : Command(creator, "operserv/quit", 0, 0) + CommandOSQuit(Module *creator) : Command(creator, "operserv/quit", 0, 1) { this->SetDesc(_("Terminate services WITHOUT saving")); + if (Config->GetModule(this->owner)->Get<bool>("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get<bool>("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get<Anope::string>("networkname"); + if (requirename && (params.empty() || !params[0].equals_cs(networkname))) + { + OnSyntaxError(source, source.command); + return; + } + Log(LOG_ADMIN, source, this); Anope::QuitReason = source.command + " command received from " + source.GetNick(); Anope::Quitting = true; @@ -44,13 +54,23 @@ class CommandOSRestart final : public Command { public: - CommandOSRestart(Module *creator) : Command(creator, "operserv/restart", 0, 0) + CommandOSRestart(Module *creator) : Command(creator, "operserv/restart", 0, 1) { this->SetDesc(_("Save databases and restart services")); + if (Config->GetModule(this->owner)->Get<bool>("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get<bool>("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get<Anope::string>("networkname"); + if (requirename && (params.empty() || !params[0].equals_cs(networkname))) + { + OnSyntaxError(source, source.command); + return; + } + Log(LOG_ADMIN, source, this); Anope::QuitReason = source.command + " command received from " + source.GetNick(); Anope::Quitting = Anope::Restarting = true; @@ -71,13 +91,23 @@ class CommandOSShutdown final : public Command { public: - CommandOSShutdown(Module *creator) : Command(creator, "operserv/shutdown", 0, 0) + CommandOSShutdown(Module *creator) : Command(creator, "operserv/shutdown", 0, 1) { this->SetDesc(_("Terminate services with save")); + if (Config->GetModule(this->owner)->Get<bool>("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get<bool>("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get<Anope::string>("networkname"); + if (requirename && (params.empty() || !params[0].equals_cs(networkname))) + { + OnSyntaxError(source, source.command); + return; + } + Log(LOG_ADMIN, source, this); Anope::QuitReason = source.command + " command received from " + source.GetNick(); Anope::Quitting = true; |