summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/channel_mode.h3
-rw-r--r--include/client.h4
-rw-r--r--modules/core/m_join.c2
-rw-r--r--modules/core/m_kick.c6
-rw-r--r--modules/m_invite.c2
-rw-r--r--modules/m_topic.c2
-rw-r--r--src/channel.c8
-rw-r--r--src/channel_mode.c5
-rw-r--r--src/conf.c2
-rw-r--r--src/conf_parser.y6
-rw-r--r--src/s_user.c2
11 files changed, 24 insertions, 18 deletions
diff --git a/include/channel_mode.h b/include/channel_mode.h
index 76136ec..755c17a 100644
--- a/include/channel_mode.h
+++ b/include/channel_mode.h
@@ -44,7 +44,8 @@ enum
CHACCESS_NOTONCHAN = -1,
CHACCESS_PEON = 0,
CHACCESS_HALFOP = 1,
- CHACCESS_CHANOP = 2
+ CHACCESS_CHANOP = 2,
+ CHACCESS_GOD = 3
};
/* can_send results */
diff --git a/include/client.h b/include/client.h
index e799eca..a983cd5 100644
--- a/include/client.h
+++ b/include/client.h
@@ -168,7 +168,7 @@ struct MaskItem;
#define UMODE_HIDDENHOST 0x01000000 /**< User's host is hidden */
#define UMODE_SSL 0x02000000 /**< User is connected via TLS/SSL */
#define UMODE_WEBIRC 0x04000000 /**< User connected via a webirc gateway */
-#define UMODE_GCHANOP 0x08000000 /**< Global channel operator */
+#define UMODE_GOD 0x08000000 /**< Operator is God */
#define UMODE_ALL UMODE_SERVNOTICE
@@ -181,7 +181,7 @@ struct MaskItem;
UMODE_REGONLY | UMODE_REGISTERED | UMODE_ADMIN |\
UMODE_HIDDEN | UMODE_HIDDENHOST | UMODE_SSL |\
UMODE_WEBIRC | UMODE_CALLERID | UMODE_SOFTCALLERID |\
- UMODE_GCHANOP)
+ UMODE_GOD)
diff --git a/modules/core/m_join.c b/modules/core/m_join.c
index 833bebb..df22fe0 100644
--- a/modules/core/m_join.c
+++ b/modules/core/m_join.c
@@ -174,7 +174,7 @@ m_join(struct Client *client_p, struct Client *source_p,
/*
* can_join checks for +i key, bans.
*/
- if ((i = can_join(source_p, chptr, key)))
+ if ((i = can_join(source_p, chptr, key)) && !HasUMode(source_p, UMODE_GOD))
{
sendto_one(source_p, form_str(i), me.name,
source_p->name, chptr->chname);
diff --git a/modules/core/m_kick.c b/modules/core/m_kick.c
index 1b15c4d..5d4545f 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) && !HasUMode(source_p, UMODE_GCHANOP))
+ if (!has_member_flags(ms_source, CHFL_CHANOP|CHFL_HALFOP) && !HasUMode(source_p, UMODE_GOD))
{
/* was a user, not a server, and user isn't seen as a chanop here */
if (MyConnect(source_p))
@@ -146,9 +146,9 @@ 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) && !HasUMode(source_p, UMODE_GCHANOP))
+ if (has_member_flags(ms_source, CHFL_HALFOP) && !has_member_flags(ms_source, CHFL_CHANOP) && !HasUMode(source_p, UMODE_GOD))
{
- if (has_member_flags(ms_target, CHFL_CHANOP|CHFL_HALFOP) || HasUMode(target_p, UMODE_GCHANOP))
+ if (has_member_flags(ms_target, CHFL_CHANOP|CHFL_HALFOP) || HasUMode(target_p, UMODE_GOD))
{
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 48e86e6..ccca4dd 100644
--- a/modules/m_invite.c
+++ b/modules/m_invite.c
@@ -91,7 +91,7 @@ m_invite(struct Client *client_p, struct Client *source_p,
}
if (MyConnect(source_p) && !has_member_flags(ms, CHFL_CHANOP)
- && !HasUMode(source_p, UMODE_GCHANOP))
+ && !HasUMode(source_p, UMODE_GOD))
{
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 3aa5e3d..6d7e351 100644
--- a/modules/m_topic.c
+++ b/modules/m_topic.c
@@ -82,7 +82,7 @@ m_topic(struct Client *client_p, struct Client *source_p,
if (!(chptr->mode.mode & MODE_TOPICLIMIT) ||
has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP) ||
- HasUMode(source_p, UMODE_GCHANOP))
+ HasUMode(source_p, UMODE_GOD))
{
char topic_info[USERHOST_REPLYLEN];
diff --git a/src/channel.c b/src/channel.c
index f96f705..fb453e3 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -436,7 +436,7 @@ channel_member_names(struct Client *source_p, struct Channel *chptr,
int multi_prefix = HasCap(source_p, CAP_MULTI_PREFIX) != 0;
int uhnames = HasCap(source_p, CAP_UHNAMES) != 0;
- if (PubChannel(chptr) || is_member)
+ if (PubChannel(chptr) || is_member || HasUMode(source_p, UMODE_GOD))
{
t = lbuf + snprintf(lbuf, sizeof(lbuf), form_str(RPL_NAMREPLY),
me.name, source_p->name,
@@ -447,7 +447,8 @@ channel_member_names(struct Client *source_p, struct Channel *chptr,
{
const struct Membership *ms = ptr->data;
- if (HasUMode(ms->client_p, UMODE_INVISIBLE) && !is_member)
+ if (HasUMode(ms->client_p, UMODE_INVISIBLE) && !is_member &&
+ !HasUMode(source_p, UMODE_GOD))
continue;
if (!uhnames)
@@ -750,7 +751,8 @@ can_send(struct Channel *chptr, struct Client *source_p,
{
struct MaskItem *conf = NULL;
- if (IsServer(source_p) || HasFlag(source_p, FLAGS_SERVICE) || HasUMode(source_p, UMODE_GCHANOP))
+ if (IsServer(source_p) || HasFlag(source_p, FLAGS_SERVICE) ||
+ HasUMode(source_p, UMODE_GOD))
return CAN_SEND_OPV;
if (MyClient(source_p) && !IsExemptResv(source_p))
diff --git a/src/channel_mode.c b/src/channel_mode.c
index 5a11d79..fc6771b 100644
--- a/src/channel_mode.c
+++ b/src/channel_mode.c
@@ -1578,7 +1578,7 @@ get_channel_access(const struct Client *source_p,
const struct Membership *member)
{
/* Let hacked servers in for now... */
- if (!MyClient(source_p) || HasUMode(source_p, UMODE_GCHANOP))
+ if (!MyClient(source_p))
return CHACCESS_CHANOP;
if (member == NULL)
@@ -1595,6 +1595,9 @@ get_channel_access(const struct Client *source_p,
return CHACCESS_HALFOP;
#endif
+ if (HasUMode(source_p, UMODE_GOD))
+ return CHACCESS_GOD;
+
return CHACCESS_PEON;
}
diff --git a/src/conf.c b/src/conf.c
index 1464d07..e488dec 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -1172,7 +1172,7 @@ set_default_conf(void)
ConfigFileEntry.true_no_oper_flood = 0;
ConfigFileEntry.oper_pass_resv = 1;
ConfigFileEntry.max_targets = MAX_TARGETS_DEFAULT;
- ConfigFileEntry.oper_only_umodes = UMODE_GCHANOP | UMODE_DEBUG;
+ ConfigFileEntry.oper_only_umodes = UMODE_GOD | UMODE_DEBUG;
ConfigFileEntry.oper_umodes = UMODE_BOTS | UMODE_LOCOPS | UMODE_SERVNOTICE |
UMODE_OPERWALL | UMODE_WALLOP;
ConfigFileEntry.throttle_time = 1;
diff --git a/src/conf_parser.y b/src/conf_parser.y
index f77db44..4274b6a 100644
--- a/src/conf_parser.y
+++ b/src/conf_parser.y
@@ -1271,7 +1271,7 @@ oper_umodes_item: T_BOTS
} | T_GCHANOPS
{
if (conf_parser_ctx.pass == 2)
- block_state.modes.value |= UMODE_GCHANOP;
+ block_state.modes.value |= UMODE_GOD;
};
oper_flags: IRCD_FLAGS
@@ -2781,7 +2781,7 @@ umode_oitem: T_BOTS
ConfigFileEntry.oper_umodes |= UMODE_FARCONNECT;
} | T_GCHANOPS
{
- ConfigFileEntry.oper_umodes |= UMODE_GCHANOP;
+ ConfigFileEntry.oper_umodes |= UMODE_GOD;
};
general_oper_only_umodes: OPER_ONLY_UMODES
@@ -2855,7 +2855,7 @@ umode_item: T_BOTS
ConfigFileEntry.oper_only_umodes |= UMODE_FARCONNECT;
} | T_GCHANOPS
{
- ConfigFileEntry.oper_only_umodes |= UMODE_GCHANOP;
+ ConfigFileEntry.oper_only_umodes |= UMODE_GOD;
};
general_min_nonwildcard: MIN_NONWILDCARD '=' NUMBER ';'
diff --git a/src/s_user.c b/src/s_user.c
index 751684b..d89038f 100644
--- a/src/s_user.c
+++ b/src/s_user.c
@@ -97,7 +97,7 @@ const unsigned int user_modes[256] =
0, /* L */
0, /* M */
0, /* N */
- UMODE_GCHANOP, /* O */
+ UMODE_GOD, /* O */
0, /* P */
0, /* Q */
UMODE_REGONLY, /* R */