summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2016-06-05 14:16:36 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2016-06-05 17:47:56 +0100
commit4f57d083c810f57edc0fe449b0de1f48e402107b (patch)
tree16b151f653454b48643b28a5ef6c14034e167f60 /modules
parent634111fc07826dcf7f1f408c5186dc9f842d2a5c (diff)
Add global channel operator support
Diffstat (limited to 'modules')
-rw-r--r--modules/core/m_kick.c6
-rw-r--r--modules/m_invite.c3
-rw-r--r--modules/m_topic.c3
3 files changed, 7 insertions, 5 deletions
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];