From cb097b8840594b6a77aab21d0b4c20f036a7d012 Mon Sep 17 00:00:00 2001 From: JD Horelick Date: Wed, 3 Mar 2010 15:34:57 -0500 Subject: [PATCH] Don't discard self-oppings from remote override opers. There's a small chance this could be incorrect. Also, the final set of override cleanups. --- modules/core/m_kick.c | 2 +- src/chmode.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/core/m_kick.c b/modules/core/m_kick.c index 12bf5de..2dcdcc5 100644 --- a/modules/core/m_kick.c +++ b/modules/core/m_kick.c @@ -206,7 +206,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p if(is_override) sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is overriding KICK [%s] on [%s] [%s]", - get_oper_name(source_p), who->name, chptr->chname, comment); + get_oper_name(source_p), command, who->name, chptr->chname, comment); /* jdc * - In the case of a server kicking a user (i.e. CLEARCHAN), diff --git a/src/chmode.c b/src/chmode.c index cb2e224..442d6f1 100644 --- a/src/chmode.c +++ b/src/chmode.c @@ -783,7 +783,12 @@ chm_ban(struct Client *source_p, struct Channel *chptr, mode_type != CHFL_QUIET) { if(IsOverride(source_p)) - override = 1; + { + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "%s is overriding modes on %s: (%s list)", + get_oper_name(source_p), chptr->chname, + mode_type == CHFL_INVEX ? "invex" : "exempt"); + } else { @@ -967,8 +972,11 @@ chm_owner(struct Client *source_p, struct Channel *chptr, if(targ_p == source_p) { no_override_deop = 1; + /* Don't reject modes from remote. It desyncs, and this is perfectly + * legitimate from a remote override oper. if(!override) return; + */ } mode_changes[mode_count].letter = c; @@ -1068,8 +1076,11 @@ chm_op(struct Client *source_p, struct Channel *chptr, if(targ_p == source_p) { no_override_deop = 1; + /* Don't reject modes from remote. It desyncs, and this is perfectly + * legitimate from a remote override oper. if(!override) return; + */ } mode_changes[mode_count].letter = c; @@ -1178,8 +1189,11 @@ chm_halfop(struct Client *source_p, struct Channel *chptr, if(targ_p == source_p) { no_override_deop = 1; + /* Don't reject modes from remote. It desyncs, and this is perfectly + * legitimate from a remote override oper. if(!override) return; + */ } mode_changes[mode_count].letter = c; @@ -2052,7 +2066,7 @@ set_channel_mode(struct Client *client_p, struct Client *source_p, source_p->name, source_p->username, source_p->host, chptr->chname); - for (override = 0; override < (IsOverride(source_p) ? 2 : 1); ++override) + for (override = 0; override < (IsOverride(source_p) && alevel != CHFL_CHANOP ? 2 : 1); ++override) { int was_on_chan = 0;