From b612881ec950c1d2c57afe4fdea16d83830890db Mon Sep 17 00:00:00 2001 From: brain Date: Sat, 9 Sep 2006 13:46:58 +0000 Subject: m_override is now fixed, replaced AC_GENERAL_MODE OnAccessCheck event git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5180 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/mode.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/mode.cpp b/src/mode.cpp index 3bdcb1a30..290933ab6 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -312,15 +312,23 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool /* We don't have halfop */ ServerInstance->Log(DEBUG,"The user is not a halfop or above, checking other reasons for being able to set the modes"); - /* Are we a uline or is it a servermode? */ - if ((!ServerInstance->ULine(user->server)) && (!servermode)) - { - /* Not enough permission: - * NOT a uline and NOT a servermode, - * OR, NOT halfop or above. - */ - user->WriteServ("482 %s %s :You're not a channel (half)operator",user->nick, targetchannel->name); + int MOD_RESULT = 0; + FOREACH_RESULT(I_OnAccessCheck,OnAccessCheck(user, NULL, targetchannel, AC_GENERAL_MODE)); + if (MOD_RESULT == ACR_DENY) return; + + if (MOD_RESULT == ACR_DEFAULT) + { + /* Are we a uline or is it a servermode? */ + if ((!ServerInstance->ULine(user->server)) && (!servermode)) + { + /* Not enough permission: + * NOT a uline and NOT a servermode, + * OR, NOT halfop or above. + */ + user->WriteServ("482 %s %s :You're not a channel (half)operator",user->nick, targetchannel->name); + return; + } } } } -- cgit v1.2.3