From 4f57d083c810f57edc0fe449b0de1f48e402107b Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 5 Jun 2016 14:16:36 +0100 Subject: Add global channel operator support --- modules/core/m_kick.c | 6 +++--- modules/m_invite.c | 3 ++- modules/m_topic.c | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'modules') diff --git a/modules/core/m_kick.c b/modules/core/m_kick.c index 3d9bfd5..a9f012f 100644 --- a/modules/core/m_kick.c +++ b/modules/core/m_kick.c @@ -97,7 +97,7 @@ m_kick(struct Client *client_p, struct Client *source_p, } } - if (!has_member_flags(ms_source, CHFL_CHANOP|CHFL_HALFOP)) + if (!has_member_flags(ms_source, CHFL_CHANOP|CHFL_HALFOP) && !HasUMode(source_p, UMODE_GCHANOP)) { /* was a user, not a server, and user isn't seen as a chanop here */ if (MyConnect(source_p)) @@ -146,10 +146,10 @@ m_kick(struct Client *client_p, struct Client *source_p, { #ifdef HALFOPS /* half ops cannot kick other halfops on private channels */ - if (has_member_flags(ms_source, CHFL_HALFOP) && !has_member_flags(ms_source, CHFL_CHANOP)) + if (has_member_flags(ms_source, CHFL_HALFOP) && !has_member_flags(ms_source, CHFL_CHANOP) && !HasUMode(source_p, UMODE_GCHANOP)) { if (((chptr->mode.mode & MODE_PRIVATE) && has_member_flags(ms_target, - CHFL_CHANOP|CHFL_HALFOP)) || has_member_flags(ms_target, CHFL_CHANOP)) + CHFL_CHANOP|CHFL_HALFOP)) || has_member_flags(ms_target, CHFL_CHANOP) || HasUMode(who, UMODE_GCHANOP)) { sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED), me.name, source_p->name, chptr->chname); diff --git a/modules/m_invite.c b/modules/m_invite.c index 2eb3de6..48e86e6 100644 --- a/modules/m_invite.c +++ b/modules/m_invite.c @@ -90,7 +90,8 @@ m_invite(struct Client *client_p, struct Client *source_p, return 0; } - if (MyConnect(source_p) && !has_member_flags(ms, CHFL_CHANOP)) + if (MyConnect(source_p) && !has_member_flags(ms, CHFL_CHANOP) + && !HasUMode(source_p, UMODE_GCHANOP)) { sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED), me.name, source_p->name, chptr->chname); diff --git a/modules/m_topic.c b/modules/m_topic.c index 4606e32..3aa5e3d 100644 --- a/modules/m_topic.c +++ b/modules/m_topic.c @@ -81,7 +81,8 @@ m_topic(struct Client *client_p, struct Client *source_p, } if (!(chptr->mode.mode & MODE_TOPICLIMIT) || - has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP)) + has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP) || + HasUMode(source_p, UMODE_GCHANOP)) { char topic_info[USERHOST_REPLYLEN]; -- cgit