From a1574df4a2c912943e1d5858e7fd3cb92e8b6345 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Wed, 6 Apr 2011 19:05:08 +0200 Subject: [PATCH] Allow kick_on_split_riding to protect channels with mlocked keys. Do kick_on_split_riding if services sends an SJOIN with a lower TS and a different key. This relies on services restoring TS (changets option in atheme) and services not immediately parting after receiving the KICK, which is the case in recent atheme. For invite-only channels, still only do kick_on_split_riding in netbursts. Services is assumed to handle this itself (atheme does). --- modules/core/m_join.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/core/m_join.c b/modules/core/m_join.c index c4308b07..070d8588 100644 --- a/modules/core/m_join.c +++ b/modules/core/m_join.c @@ -639,12 +639,15 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char { /* If configured, kick people trying to join +i/+k * channels by recreating them on split servers. - * Don't kick if the source has sent EOB (services - * deopping everyone by TS-1 SJOIN). + * If the source has sent EOB, assume this is some + * sort of hack by services. If cmode +i is set, + * services can send kicks if needed; if the key + * differs, services cannot kick in a race-free + * manner so do so here. * -- jilles */ if (ConfigChannel.kick_on_split_riding && - !HasSentEob(source_p) && - ((mode.mode & MODE_INVITEONLY) || + ((!HasSentEob(source_p) && + mode.mode & MODE_INVITEONLY) || (mode.key[0] != 0 && irccmp(mode.key, oldmode->key) != 0))) { struct membership *msptr;