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).
This commit is contained in:
parent
572488e029
commit
a1574df4a2
1 changed files with 7 additions and 4 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue