diff options
Diffstat (limited to 'src/mode.cpp')
-rw-r--r-- | src/mode.cpp | 24 |
1 files 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; + } } } } |