From 7922b96408a4908c9ebba363cb9ca63dd195e178 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 10 May 2022 15:16:21 +0100 Subject: Use the servprotect mode to protect services. Anope and Atheme already set this on their clients so no downstream changes are needed. Closes #781. --- src/modules/m_remove.cpp | 4 +++- src/modules/m_sajoin.cpp | 9 +++++++-- src/modules/m_sakick.cpp | 9 +++++++-- src/modules/m_sanick.cpp | 9 +++++++-- src/modules/m_sapart.cpp | 9 +++++++-- src/modules/m_saquit.cpp | 9 +++++++-- 6 files changed, 38 insertions(+), 11 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_remove.cpp b/src/modules/m_remove.cpp index 74b4c2992..5b41b1ccf 100644 --- a/src/modules/m_remove.cpp +++ b/src/modules/m_remove.cpp @@ -36,6 +36,7 @@ class CommandRemove final { private: ChanModeReference nokicksmode; + UserModeReference servprotectmode; public: unsigned long protectedrank; @@ -44,6 +45,7 @@ public: CommandRemove(Module* Creator) : Command(Creator, "REMOVE", 2, 3) , nokicksmode(Creator, "nokick") + , servprotectmode(Creator, "servprotect") { syntax = { " [:]" }; translation = { TR_TEXT, TR_NICK, TR_TEXT }; @@ -84,7 +86,7 @@ public: return CmdResult::FAILURE; } - if (target->server->IsService()) + if (target->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_RESTRICTED, channame, "Only a service may remove a service from a channel."); return CmdResult::FAILURE; diff --git a/src/modules/m_sajoin.cpp b/src/modules/m_sajoin.cpp index 0e03bbfda..40cb14a81 100644 --- a/src/modules/m_sajoin.cpp +++ b/src/modules/m_sajoin.cpp @@ -30,8 +30,13 @@ class CommandSajoin final : public Command { +private: + UserModeReference servprotectmode; + public: - CommandSajoin(Module* Creator) : Command(Creator,"SAJOIN", 1) + CommandSajoin(Module* Creator) + : Command(Creator,"SAJOIN", 1) + , servprotectmode(Creator, "servprotect") { allow_empty_last_param = false; access_needed = CmdAccess::OPERATOR; @@ -57,7 +62,7 @@ public: return CmdResult::FAILURE; } - if (dest->server->IsService()) + if (dest->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_NOPRIVILEGES, "Cannot use an SA command on a service"); return CmdResult::FAILURE; diff --git a/src/modules/m_sakick.cpp b/src/modules/m_sakick.cpp index 5ba5710d9..7175d5ae2 100644 --- a/src/modules/m_sakick.cpp +++ b/src/modules/m_sakick.cpp @@ -27,8 +27,13 @@ class CommandSakick final : public Command { +private: + UserModeReference servprotectmode; + public: - CommandSakick(Module* Creator) : Command(Creator,"SAKICK", 2, 3) + CommandSakick(Module* Creator) + : Command(Creator,"SAKICK", 2, 3) + , servprotectmode(Creator, "servprotect") { access_needed = CmdAccess::OPERATOR; syntax = { " [:]" }; @@ -44,7 +49,7 @@ public: { const std::string& reason = (parameters.size() > 2) ? parameters[2] : dest->nick; - if (dest->server->IsService()) + if (dest->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_NOPRIVILEGES, "Cannot use an SA command on a service"); return CmdResult::FAILURE; diff --git a/src/modules/m_sanick.cpp b/src/modules/m_sanick.cpp index 8854ec699..466856008 100644 --- a/src/modules/m_sanick.cpp +++ b/src/modules/m_sanick.cpp @@ -28,8 +28,13 @@ class CommandSanick final : public Command { +private: + UserModeReference servprotectmode; + public: - CommandSanick(Module* Creator) : Command(Creator,"SANICK", 2) + CommandSanick(Module* Creator) + : Command(Creator,"SANICK", 2) + , servprotectmode(Creator, "servprotect") { allow_empty_last_param = false; access_needed = CmdAccess::OPERATOR; @@ -44,7 +49,7 @@ public: /* Do local sanity checks and bails */ if (IS_LOCAL(user)) { - if (target && target->server->IsService()) + if (target && target->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_NOPRIVILEGES, "Cannot use an SA command on a service"); return CmdResult::FAILURE; diff --git a/src/modules/m_sapart.cpp b/src/modules/m_sapart.cpp index d40a58bc6..68399f794 100644 --- a/src/modules/m_sapart.cpp +++ b/src/modules/m_sapart.cpp @@ -28,8 +28,13 @@ class CommandSapart final : public Command { +private: + UserModeReference servprotectmode; + public: - CommandSapart(Module* Creator) : Command(Creator,"SAPART", 2, 3) + CommandSapart(Module* Creator) + : Command(Creator,"SAPART", 2, 3) + , servprotectmode(Creator, "servprotect") { access_needed = CmdAccess::OPERATOR; syntax = { " [,]+ [:]" }; @@ -50,7 +55,7 @@ public: if (parameters.size() > 2) reason = parameters[2]; - if (dest->server->IsService()) + if (dest->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_NOPRIVILEGES, "Cannot use an SA command on a service"); return CmdResult::FAILURE; diff --git a/src/modules/m_saquit.cpp b/src/modules/m_saquit.cpp index 6f1a6d687..1b00e5dce 100644 --- a/src/modules/m_saquit.cpp +++ b/src/modules/m_saquit.cpp @@ -30,8 +30,13 @@ class CommandSaquit final : public Command { +private: + UserModeReference servprotectmode; + public: - CommandSaquit(Module* Creator) : Command(Creator, "SAQUIT", 2, 2) + CommandSaquit(Module* Creator) + : Command(Creator, "SAQUIT", 2, 2) + , servprotectmode(Creator, "servprotect") { access_needed = CmdAccess::OPERATOR; syntax = { " :" }; @@ -43,7 +48,7 @@ public: User* dest = ServerInstance->Users.Find(parameters[0]); if ((dest) && (dest->registered == REG_ALL)) { - if (dest->server->IsService()) + if (dest->IsModeSet(servprotectmode)) { user->WriteNumeric(ERR_NOPRIVILEGES, "Cannot use an SA command on a service"); return CmdResult::FAILURE; -- cgit v1.3.1-10-gc9f91