aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-09-02 11:44:47 +0100
committerGravatar Sadie Powell2021-09-02 11:45:23 +0100
commit3629e99c15a6ee5acd7d6015bc0b8fad1285b671 (patch)
tree7fa5373c18589f2d27a3939e78859234dc47ba05 /src/modules
parentRelease 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/modules')
-rw-r--r--src/modules/m_spanningtree/commands.h8
-rw-r--r--src/modules/m_spanningtree/compat.cpp7
-rw-r--r--src/modules/m_spanningtree/main.cpp11
-rw-r--r--src/modules/m_spanningtree/main.h3
-rw-r--r--src/modules/m_spanningtree/uid.cpp7
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]);