summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2010-02-09 15:18:06 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2010-02-09 15:18:06 +0000
commit37b9455f70ad2fd919aa83a2c96a1e4764a3b25a (patch)
tree7fe415328634ab3a78cedc628a7f36b133803337 /src
parentd1f2a430501aec8bc893647dc1049b8499e1caf6 (diff)
Allow exemptchanops to modify the channel access level needed to bypass +t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12413 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/channels.cpp14
-rw-r--r--src/modules/m_exemptchanops.cpp2
2 files changed, 9 insertions, 7 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index 0b9eb1cc4..ee1ba2e1f 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -92,14 +92,14 @@ int Channel::SetTopic(User *u, std::string &ntopic, bool forceset)
return CMD_FAILURE;
if (res != MOD_RES_ALLOW)
{
- if (!this->HasUser(u))
+ FIRST_MOD_RESULT(OnChannelRestrictionApply, res, (u,this,"topiclock"));
+ bool defok = IsModeSet('t') ? GetPrefixValue(u) >= HALFOP_VALUE : HasUser(u);
+ if (!res.check(defok))
{
- u->WriteNumeric(442, "%s %s :You're not on that channel!",u->nick.c_str(), this->name.c_str());
- return CMD_FAILURE;
- }
- if ((this->IsModeSet('t')) && (this->GetPrefixValue(u) < HALFOP_VALUE))
- {
- u->WriteNumeric(482, "%s %s :You do not have access to change the topic on this channel", u->nick.c_str(), this->name.c_str());
+ if (!this->HasUser(u))
+ u->WriteNumeric(442, "%s %s :You're not on that channel!",u->nick.c_str(), this->name.c_str());
+ else
+ u->WriteNumeric(482, "%s %s :You do not have access to change the topic on this channel", u->nick.c_str(), this->name.c_str());
return CMD_FAILURE;
}
}
diff --git a/src/modules/m_exemptchanops.cpp b/src/modules/m_exemptchanops.cpp
index f4a8c5d5a..df5ec4bf3 100644
--- a/src/modules/m_exemptchanops.cpp
+++ b/src/modules/m_exemptchanops.cpp
@@ -125,6 +125,8 @@ class ModuleExemptChanOps : public Module
ModeHandler* mh = ServerInstance->Modes->FindMode(minmode, MODETYPE_CHANNEL);
if (mh && mypfx >= mh->GetPrefixRank())
return MOD_RES_ALLOW;
+ if (mh || minmode == '*')
+ return MOD_RES_DENY;
return MOD_RES_PASSTHRU;
}
};