From 3e986b215e45c2fa15d1b07da8fef19e3560e45b Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 12 Feb 2025 15:39:41 +0000 Subject: Add extra protections to avoid rebooting the wrong network. --- modules/operserv/os_shutdown.cpp | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) (limited to 'modules/operserv') 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("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get("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("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get("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("requirename")) + this->SetSyntax(_("\037network-name\037")); } void Execute(CommandSource &source, const std::vector ¶ms) override { + const auto requirename = Config->GetModule(this->owner)->Get("requirename"); + const auto networkname = Config->GetBlock("networkinfo")->Get("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; -- cgit