From 4ce377944c8e4e02174acf9c3a0fd0b4effff29a Mon Sep 17 00:00:00 2001 From: James Lu Date: Thu, 23 Jul 2015 13:36:40 -0700 Subject: [PATCH] relay: when filtering modes, ignore internal mode-type lists (modenames starting with *) --- plugins/relay.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/plugins/relay.py b/plugins/relay.py index dac12f1..291deb5 100644 --- a/plugins/relay.py +++ b/plugins/relay.py @@ -475,10 +475,14 @@ def relayModes(irc, remoteirc, sender, channel, modes=None): for name, m in irc.cmodes.items(): supported_char = None if modechar == m: + if name.startswith('*'): + # This internally is just used for storing which modes + # are which type; ignore them. + continue if name not in whitelisted_cmodes: - log.debug("(%s) Relay mode: skipping mode (%r, %r) because " - "it isn't a whitelisted (safe) mode for relay.", - irc.name, modechar, arg) + log.debug("(%s) Relay mode: skipping mode %r (%r, %r) because " + "it isn't a whitelisted (safe) cmode for relay.", + irc.name, name, modechar, arg) break if modechar in irc.prefixmodes: # This is a prefix mode (e.g. +o). We must coerse the argument @@ -523,11 +527,15 @@ def getSupportedUmodes(irc, remoteirc, modes): arg = modepair[1] for name, m in irc.umodes.items(): supported_char = None + if name.startswith('*'): + # This internally is just used for storing which modes + # are which type; ignore them. + continue if modechar == m: if name not in whitelisted_umodes: - log.debug("(%s) getSupportedUmodes: skipping mode (%r, %r) because " - "it isn't a whitelisted (safe) mode for relay.", - irc.name, modechar, arg) + log.debug("(%s) getSupportedUmodes: skipping mode %r (%r, %r) because " + "it isn't a whitelisted (safe) umode for relay.", + irc.name, name, modechar, arg) break supported_char = remoteirc.umodes.get(name) if supported_char: