From 19530107d712f08e60c66aea8bd0dbd3f1937585 Mon Sep 17 00:00:00 2001 From: James Lu Date: Sun, 13 Sep 2015 14:23:27 -0700 Subject: [PATCH] relay: enforce CLAIM checks in TOPIC too. --- plugins/relay.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/plugins/relay.py b/plugins/relay.py index d1153c3..b65801e 100644 --- a/plugins/relay.py +++ b/plugins/relay.py @@ -707,22 +707,27 @@ utils.add_hook(handle_mode, 'MODE') def handle_topic(irc, numeric, command, args): channel = args['channel'] + oldtopic = args['oldtopic'] topic = args['topic'] - for name, remoteirc in world.networkobjects.items(): - if irc.name == name or not remoteirc.connected.is_set(): - continue + if checkClaim(irc, channel, numeric): + for name, remoteirc in world.networkobjects.items(): + if irc.name == name or not remoteirc.connected.is_set(): + continue + + remotechan = findRemoteChan(irc, remoteirc, channel) + # Don't send if the remote topic is the same as ours. + if remotechan is None or topic == remoteirc.channels[remotechan].topic: + continue + # This might originate from a server too. + remoteuser = getRemoteUser(irc, remoteirc, numeric, spawnIfMissing=False) + if remoteuser: + remoteirc.proto.topicClient(remoteuser, remotechan, topic) + else: + rsid = getRemoteSid(remoteirc, irc) + remoteirc.proto.topicServer(rsid, remotechan, topic) + else: # Topic change blocked by claim. + irc.proto.topicClient(irc.pseudoclient.uid, channel, oldtopic) - remotechan = findRemoteChan(irc, remoteirc, channel) - # Don't send if the remote topic is the same as ours. - if remotechan is None or topic == remoteirc.channels[remotechan].topic: - continue - # This might originate from a server too. - remoteuser = getRemoteUser(irc, remoteirc, numeric, spawnIfMissing=False) - if remoteuser: - remoteirc.proto.topicClient(remoteuser, remotechan, topic) - else: - rsid = getRemoteSid(remoteirc, irc) - remoteirc.proto.topicServer(rsid, remotechan, topic) utils.add_hook(handle_topic, 'TOPIC') def handle_kill(irc, numeric, command, args):