summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-06-09 17:47:07 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-06-09 17:47:07 +0200
commitdf1e8257eb8edaf46b9fec7ce972db29de1b8929 (patch)
tree0a40490203f18166dc5c9c106c2fe7b09314ecc8
parentf45a8e2a14329860ad07b903797cef00a925e8cb (diff)
m_remove Make the protected rank configurable instead of hardcoding it to 50000
Change type of ulevel and tlevel to unsigned int
-rw-r--r--src/modules/m_remove.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/modules/m_remove.cpp b/src/modules/m_remove.cpp
index 1b7d84de2..30924eb2f 100644
--- a/src/modules/m_remove.cpp
+++ b/src/modules/m_remove.cpp
@@ -38,6 +38,8 @@ class RemoveBase : public Command
ChanModeReference& nokicksmode;
public:
+ unsigned int protectedrank;
+
RemoveBase(Module* Creator, bool& snk, ChanModeReference& nkm, const char* cmdn)
: Command(Creator, cmdn, 2, 3)
, supportnokicks(snk)
@@ -84,9 +86,6 @@ class RemoveBase : public Command
return CMD_FAILURE;
}
- int ulevel = channel->GetPrefixValue(user);
- int tlevel = channel->GetPrefixValue(target);
-
if (target->server->IsULine())
{
user->WriteNumeric(482, "%s :Only a u-line may remove a u-line from a channel.", channame.c_str());
@@ -99,9 +98,11 @@ class RemoveBase : public Command
/* We'll let everyone remove their level and below, eg:
* ops can remove ops, halfops, voices, and those with no mode (no moders actually are set to 1)
* a ulined target will get a higher level than it's possible for a /remover to get..so they're safe.
- * Nobody may remove a founder.
+ * Nobody may remove people with >= protectedrank rank.
*/
- if ((!IS_LOCAL(user)) || ((ulevel > VOICE_VALUE) && (ulevel >= tlevel) && (tlevel != 50000)))
+ unsigned int ulevel = channel->GetPrefixValue(user);
+ unsigned int tlevel = channel->GetPrefixValue(target);
+ if ((!IS_LOCAL(user)) || ((ulevel > VOICE_VALUE) && (ulevel >= tlevel) && ((protectedrank == 0) || (tlevel < protectedrank))))
{
// REMOVE will be sent to the target's server and it will reply with a PART (or do nothing if it doesn't understand the command)
if (!IS_LOCAL(target))
@@ -209,7 +210,9 @@ class ModuleRemove : public Module
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
- supportnokicks = ServerInstance->Config->ConfValue("remove")->getBool("supportnokicks");
+ ConfigTag* tag = ServerInstance->Config->ConfValue("remove");
+ supportnokicks = tag->getBool("supportnokicks");
+ cmd1.protectedrank = cmd2.protectedrank = tag->getInt("protectedrank", 50000);
}
Version GetVersion() CXX11_OVERRIDE