From 20c540af7dc27bb9f4de80d6990b9dc4b8e59ed8 Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Tue, 15 Oct 2024 17:16:32 +0100 Subject: [PATCH] Make CHGHOST work with detached channels --- src/IRCSock.cpp | 5 +++-- test/integration/tests/core.cpp | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index 4c4ab4e9..94250be5 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -536,8 +536,6 @@ bool CIRCSock::OnChgHostMessage(CChgHostMessage& Message) { } } - if (!bNeedEmulate) return true; - CNick NewNick = Message.GetNick(); NewNick.SetIdent(Message.GetNewIdent()); NewNick.SetHost(Message.GetNewHost()); @@ -548,6 +546,9 @@ bool CIRCSock::OnChgHostMessage(CChgHostMessage& Message) { pNick->SetHost(Message.GetNewHost()); } + if (!bNeedEmulate) continue; + if (pChan->IsDetached()) continue; + CTargetMessage ModeMsg; ModeMsg.SetNick(CNick(":irc.znc.in")); ModeMsg.SetTags(Message.GetTags()); diff --git a/test/integration/tests/core.cpp b/test/integration/tests/core.cpp index 2b455cd9..d9364924 100644 --- a/test/integration/tests/core.cpp +++ b/test/integration/tests/core.cpp @@ -775,6 +775,15 @@ TEST_F(ZNCTest, ChgHostEmulation) { client1.ReadUntil("MODE"); ircd.Write(":user!ident-2@host-2 CHGHOST ident-3 host-3"); client1.ReadUntil(":irc.znc.in MODE #chan +ov user user"); + + // Only attached channel should receive emulation + ircd.Write(":user!ident-3@host-3 JOIN #chan2"); + client1.ReadUntil("JOIN #chan2"); + client1.Write("DETACH #chan2"); + client1.ReadUntil("Detached 1 channel"); + ircd.Write(":user!ident-3@host-3 CHGHOST ident host"); + ASSERT_THAT(client1.ReadRemainder().toStdString(), + Not(HasSubstr("#chan2"))); } TEST_F(ZNCTest, ChgHostOnce) {