From f097bc9a2db4ac103b20f4680722dc7d46fad7b3 Mon Sep 17 00:00:00 2001 From: Test_User Date: Wed, 24 Jul 2024 04:34:17 -0400 Subject: Fix cross-protocol netsplit propagations --- protocols/inspircd3.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'protocols/inspircd3.c') diff --git a/protocols/inspircd3.c b/protocols/inspircd3.c index 7457938..9d09831 100644 --- a/protocols/inspircd3.c +++ b/protocols/inspircd3.c @@ -572,8 +572,28 @@ void inspircd3_protocol_propagate_new_server(struct string from, struct string a inspircd3_protocol_propagate(from, STRING(" ENDBURST\n")); } +// [:source] SQUIT [?] +void inspircd3_protocol_propagate_remove_server(struct string from, struct server_info *server, struct string reason) { + if (server->protocol == INSPIRCD3_PROTOCOL) + return; + + inspircd3_protocol_propagate(from, STRING(":")); + inspircd3_protocol_propagate(from, SID); + inspircd3_protocol_propagate(from, STRING(" SQUIT ")); + inspircd3_protocol_propagate(from, server->sid); + inspircd3_protocol_propagate(from, STRING(" :")); + if (reason.len != 0) + inspircd3_protocol_propagate(from, reason); + else + inspircd3_protocol_propagate(from, STRING(" ")); + inspircd3_protocol_propagate(from, STRING("\n")); +} + // [:source] SQUIT [?] void inspircd3_protocol_propagate_unlink_server(struct string from, struct server_info *a, struct server_info *b, size_t protocol) { + if (protocol != INSPIRCD3_PROTOCOL) + return; + struct server_info *source; struct server_info *target; if (a->distance == 0 && !STRING_EQ(a->sid, SID)) { @@ -587,10 +607,7 @@ void inspircd3_protocol_propagate_unlink_server(struct string from, struct serve } inspircd3_protocol_propagate(from, STRING(":")); - if (protocol == INSPIRCD3_PROTOCOL) - inspircd3_protocol_propagate(from, source->sid); - else - inspircd3_protocol_propagate(from, SID); + inspircd3_protocol_propagate(from, source->sid); inspircd3_protocol_propagate(from, STRING(" SQUIT ")); inspircd3_protocol_propagate(from, target->sid); inspircd3_protocol_propagate(from, STRING(" : \n")); -- cgit v1.2.3