diff options
| author | 2021-09-02 11:44:47 +0100 | |
|---|---|---|
| committer | 2021-09-02 11:45:23 +0100 | |
| commit | 3629e99c15a6ee5acd7d6015bc0b8fad1285b671 (patch) | |
| tree | 7fa5373c18589f2d27a3939e78859234dc47ba05 /src | |
| parent | Release v4.0.0 alpha 4. (diff) | |
Add the FRHOST command to allow changing a remote user's real host.
Closes #1803.
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/m_spanningtree/commands.h | 8 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/compat.cpp | 7 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.cpp | 11 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.h | 3 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/uid.cpp | 7 |
5 files changed, 33 insertions, 3 deletions
diff --git a/src/modules/m_spanningtree/commands.h b/src/modules/m_spanningtree/commands.h index 7820d3826..b41b700c1 100644 --- a/src/modules/m_spanningtree/commands.h +++ b/src/modules/m_spanningtree/commands.h @@ -210,6 +210,13 @@ class CommandFHost : public UserOnlyServerCommand<CommandFHost> CmdResult HandleRemote(RemoteUser* user, Params& params); }; +class CommandFRHost : public UserOnlyServerCommand<CommandFRHost> +{ + public: + CommandFRHost(Module* Creator) : UserOnlyServerCommand<CommandFRHost>(Creator, "FRHOST", 1) { } + CmdResult HandleRemote(RemoteUser* user, Params& params); +}; + class CommandFIdent : public UserOnlyServerCommand<CommandFIdent> { public: @@ -419,6 +426,7 @@ class SpanningTreeCommands CommandFMode fmode; CommandFTopic ftopic; CommandFHost fhost; + CommandFHost frhost; CommandFIdent fident; CommandFName fname; SpanningTree::CommandAway away; diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 85b7ec007..7e3c6fcd5 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -47,7 +47,12 @@ void TreeSocket::WriteLine(const std::string& original_line) std::string command(line, cmdstart + 1, cmdend - cmdstart - 1); if (proto_version == PROTO_INSPIRCD_3) { - if (irc::equals(command, "SQUERY")) + if (irc::equals(command, "FRHOST")) + { + // FRHOST was introduced in PROTO_INSPIRCD_4; drop it. + return; + } + else if (irc::equals(command, "SQUERY")) { // SQUERY was introduced in PROTO_INSPIRCD_4; convert to PRIVMSG. line.replace(cmdstart + 1, cmdend - cmdstart - 1, "PRIVMSG"); diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index af0be49d3..8044a615f 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -75,6 +75,7 @@ SpanningTreeCommands::SpanningTreeCommands(ModuleSpanningTree* module) , fmode(module) , ftopic(module) , fhost(module) + , frhost(module) , fident(module) , fname(module) , away(module) @@ -543,7 +544,7 @@ void ModuleSpanningTree::OnUserJoin(Membership* memb, bool sync, bool created_by } } -void ModuleSpanningTree::OnChangeHost(User* user, const std::string &newhost) +void ModuleSpanningTree::OnChangeHost(User* user, const std::string& newhost) { if (user->registered != REG_ALL || !IS_LOCAL(user)) return; @@ -551,6 +552,14 @@ void ModuleSpanningTree::OnChangeHost(User* user, const std::string &newhost) CmdBuilder(user, "FHOST").push(newhost).Broadcast(); } +void ModuleSpanningTree::OnChangeRealHost(User* user, const std::string& newhost) +{ + if (user->registered != REG_ALL || !IS_LOCAL(user)) + return; + + CmdBuilder(user, "FRHOST").push(newhost).Broadcast(); +} + void ModuleSpanningTree::OnChangeRealName(User* user, const std::string& real) { if (user->registered != REG_ALL || !IS_LOCAL(user)) diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h index aff51ea36..160ee01f5 100644 --- a/src/modules/m_spanningtree/main.h +++ b/src/modules/m_spanningtree/main.h @@ -185,7 +185,8 @@ class ModuleSpanningTree void OnUserPostTagMessage(User* user, const MessageTarget& target, const CTCTags::TagMessageDetails& details) override; void OnBackgroundTimer(time_t curtime) override; void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) override; - void OnChangeHost(User* user, const std::string &newhost) override; + void OnChangeHost(User* user, const std::string& newhost) override; + void OnChangeRealHost(User* user, const std::string& newhost) override; void OnChangeRealName(User* user, const std::string& real) override; void OnChangeIdent(User* user, const std::string &ident) override; void OnUserPart(Membership* memb, std::string &partmessage, CUList& excepts) override; diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index 8f02fb966..26d87dff2 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -146,6 +146,13 @@ CmdResult CommandFHost::HandleRemote(RemoteUser* src, Params& params) return CmdResult::SUCCESS; } + +CmdResult CommandFRHost::HandleRemote(RemoteUser* src, Params& params) +{ + src->ChangeRealHost(params[0], false); + return CmdResult::SUCCESS; +} + CmdResult CommandFIdent::HandleRemote(RemoteUser* src, Params& params) { src->ChangeIdent(params[0]); |
