From 42fdbb7234628ff95acdb6f3f1d1d2206ad77334 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sat, 20 Jul 2024 12:31:31 +0100 Subject: Fix broadcasting UID messages to v3 servers. We have to use the compat layer here as broadcast messages do not go through the command builder. --- src/modules/m_spanningtree/commands.h | 2 +- src/modules/m_spanningtree/compat.cpp | 13 +++++++++++++ src/modules/m_spanningtree/main.cpp | 17 +---------------- src/modules/m_spanningtree/netburst.cpp | 2 +- src/modules/m_spanningtree/uid.cpp | 5 ++--- 5 files changed, 18 insertions(+), 21 deletions(-) (limited to 'src/modules/m_spanningtree') diff --git a/src/modules/m_spanningtree/commands.h b/src/modules/m_spanningtree/commands.h index bb92e07a6..c02f3b0d3 100644 --- a/src/modules/m_spanningtree/commands.h +++ b/src/modules/m_spanningtree/commands.h @@ -102,7 +102,7 @@ public: : public CmdBuilder { public: - Builder(User* user, bool real_user); + Builder(User* user); }; }; diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 197b0e73c..8bfe1a15e 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -114,6 +114,19 @@ void TreeSocket::WriteLine(const std::string& original_line) // SQUERY was introduced in PROTO_INSPIRCD_4; convert to PRIVMSG. line.replace(cmdstart, 6, "PRIVMSG"); } + else if (irc::equals(command, "UID")) + { + // : UID [] : + // ^^^^^^ New in 1206 + size_t uuidend = NextToken(line, cmdend); + size_t nickchangedend = NextToken(line, uuidend); + size_t nickend = NextToken(line, nickchangedend); + size_t hostend = NextToken(line, nickend); + size_t dhostend = NextToken(line, hostend); + size_t userend = NextToken(line, dhostend); + if (userend != std::string::npos) + line.erase(dhostend, userend - dhostend); + } } WriteLineInternal(line); diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 47545b47e..c58004a70 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -497,22 +497,7 @@ void ModuleSpanningTree::OnUserConnect(LocalUser* user) if (sslapi) sslapi->GetCertificate(user); - CommandUID::Builder uid(user, true); - CommandUID::Builder olduid(user, false); - - // NOTE: we can't do CommandUID::Builder(user).Broadcast() whilst - // we still support the 1205 protocol. - for (const auto* server : Utils->TreeRoot->GetChildren()) - { - TreeSocket* socket = server->GetSocket(); - if (!socket) - continue; // Should never happen? - - if (socket->proto_version >= PROTO_INSPIRCD_4) - socket->WriteLine(uid); - else - socket->WriteLine(olduid); - } + CommandUID::Builder(user).Broadcast(); if (user->IsOper()) CommandOpertype::Builder(user, user->oper).Broadcast(); diff --git a/src/modules/m_spanningtree/netburst.cpp b/src/modules/m_spanningtree/netburst.cpp index 77aa73d83..798987975 100644 --- a/src/modules/m_spanningtree/netburst.cpp +++ b/src/modules/m_spanningtree/netburst.cpp @@ -282,7 +282,7 @@ void TreeSocket::SendUsers(BurstState& bs) if (!user->IsFullyConnected()) continue; - this->WriteLine(CommandUID::Builder(user, this->proto_version != PROTO_INSPIRCD_3)); + this->WriteLine(CommandUID::Builder(user)); if (user->IsOper()) this->WriteLine(CommandOpertype::Builder(user, user->oper)); diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index 57a126933..8425984fb 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -177,7 +177,7 @@ CmdResult CommandFName::HandleRemote(RemoteUser* src, Params& params) return CmdResult::SUCCESS; } -CommandUID::Builder::Builder(User* user, bool real_user) +CommandUID::Builder::Builder(User* user) : CmdBuilder(TreeServer::Get(user), "UID") { push(user->uuid); @@ -185,8 +185,7 @@ CommandUID::Builder::Builder(User* user, bool real_user) push(user->nick); push(user->GetRealHost()); push(user->GetDisplayedHost()); - if (real_user) - push(user->GetRealUser()); + push(user->GetRealUser()); push(user->GetDisplayedUser()); push(user->GetAddress()); push_int(user->signon); -- cgit v1.3.1-10-gc9f91