aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-01-13 20:43:13 +0000
committerGravatar Sadie Powell2023-01-13 20:50:00 +0000
commit1f4ffdfee959614e3afe7e7daab06a040ca1ac41 (patch)
treef49b94d8d59e9d08867501c23b21828a3bb9976b /src
parentDocument the cloak_sha256 <cloak:case> option. (diff)
Various improvements to the cloak system.
- Only rewrite cloak => cloaking if the cloak_md5 module is also loaded. - Include the cloak method in the link data. - If 1206 servers are using different cloak methods then ignore the other data when telling operators about the link failure. - Clean up the code in a few places.
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_cloak.cpp27
-rw-r--r--src/modules/m_cloak_md5.cpp9
-rw-r--r--src/modules/m_cloak_sha256.cpp22
-rw-r--r--src/modules/m_spanningtree/capab.cpp2
4 files changed, 34 insertions, 26 deletions
diff --git a/src/modules/m_cloak.cpp b/src/modules/m_cloak.cpp
index f7ef8fdb8..f6e0c2e98 100644
--- a/src/modules/m_cloak.cpp
+++ b/src/modules/m_cloak.cpp
@@ -21,6 +21,7 @@
#include "clientprotocolevent.h"
#include "modules/cloak.h"
#include "modules/ircv3_replies.h"
+#include "utility/map.h"
typedef std::vector<Cloak::MethodPtr> CloakMethodList;
@@ -233,10 +234,30 @@ class ModuleCloakSHA256 final
cloakmethods.swap(newcloakmethods);
}
- void GetLinkData(Module::LinkData& data, std::string& compatdata) override
+ void CompareLinkData(const LinkData& otherdata, LinkDataDiff& diffs)
{
- if (!cloakmethods.empty())
- cloakmethods.front()->GetLinkData(data, compatdata);
+ std::string unused;
+ LinkData data;
+ this->GetLinkData(data, unused);
+
+ // If the only difference is the method then just include that.
+ insp::map::difference(data, otherdata, diffs);
+ auto it = diffs.find("method");
+ if (it != diffs.end())
+ diffs = { *it };
+ }
+
+ void GetLinkData(LinkData& data, std::string& compatdata) override
+ {
+ if (cloakmethods.empty())
+ return;
+
+ auto& cloakmethod = cloakmethods.front();
+ cloakmethod->GetLinkData(data, compatdata);
+
+ data["method"] = cloakmethod->GetName();
+ if (compatdata.empty())
+ compatdata.assign(cloakmethod->GetName());
}
void Prioritize() override
diff --git a/src/modules/m_cloak_md5.cpp b/src/modules/m_cloak_md5.cpp
index 0e2971d85..cab08cad9 100644
--- a/src/modules/m_cloak_md5.cpp
+++ b/src/modules/m_cloak_md5.cpp
@@ -209,15 +209,6 @@ struct CloakInfo final
void GetLinkData(Module::LinkData& data, std::string& compatdata) override
{
- switch (mode)
- {
- case MODE_HALF_CLOAK:
- data["mode"] = "half";
- break;
- case MODE_OPAQUE:
- data["mode"] = "full";
- break;
- }
data["domain-parts"] = ConvToStr(domainparts);
data["ignore-case"] = ignorecase ? "yes" : "no";
data["prefix"] = prefix;
diff --git a/src/modules/m_cloak_sha256.cpp b/src/modules/m_cloak_sha256.cpp
index ebd0c178d..a8ad87a5e 100644
--- a/src/modules/m_cloak_sha256.cpp
+++ b/src/modules/m_cloak_sha256.cpp
@@ -85,7 +85,7 @@ private:
const std::string beta = Hash(InspIRCd::Format("%u.%u.%u", a, b, c));
const std::string gamma = Hash(InspIRCd::Format("%u.%u", a, b));
- return Wrap(InspIRCd::Format("%s.%s.%s", alpha.c_str(), beta.c_str(), gamma.c_str()), ".");
+ return Wrap(InspIRCd::Format("%s.%s.%s", alpha.c_str(), beta.c_str(), gamma.c_str()), '.');
}
std::string CloakIPv6(const unsigned char* address)
@@ -109,7 +109,7 @@ private:
const std::string beta = Hash(InspIRCd::Format("%x:%x:%x:%x:%x:%x:%x", a, b, c, d, e, f, g));
const std::string gamma = Hash(InspIRCd::Format("%x:%x:%x:%x", a, b, c, d));
- return Wrap(InspIRCd::Format("%s:%s:%s", alpha.c_str(), beta.c_str(), gamma.c_str()), ":");
+ return Wrap(InspIRCd::Format("%s:%s:%s", alpha.c_str(), beta.c_str(), gamma.c_str()), ':');
}
std::string CloakHost(const std::string& host, char separator)
@@ -136,14 +136,14 @@ private:
return out;
}
- std::string Wrap(const std::string& cloak, const char* separator)
+ std::string Wrap(const std::string& cloak, char separator)
{
std::string fullcloak;
if (!prefix.empty())
- fullcloak.append(prefix).append(separator);
+ fullcloak.append(prefix).append(1, separator);
fullcloak.append(cloak);
if (!suffix.empty())
- fullcloak.append(separator).append(suffix);
+ fullcloak.append(1, separator).append(suffix);
return fullcloak;
}
@@ -190,15 +190,11 @@ public:
// IMPORTANT: link data is sent over unauthenticated server links so we
// can't directly send the key here. Instead we use dummy cloaks that
// allow verification of or less the same thing.
- irc::sockets::sockaddrs sa;
- if (sa.from_ip("123.123.123.123"))
- data["cloak-v4"] = sha256 ? CloakAddress(sa) : broken;
+ data["cloak-v4"] = sha256 ? Generate("123.123.123.123") : broken;
+ data["cloak-v6"] = sha256 ? Generate("dead:beef:cafe::") : broken;
+ data["cloak-host"] = sha256 ? Generate("cloak.inspircd.org") : broken;
+ data["cloak-unix"] = sha256 ? Generate("/inspircd/cloak.sock") : broken;
- if (sa.from_ip("dead:beef:cafe::"))
- data["cloak-v6"] = sha256 ? CloakAddress(sa) : broken;
-
- data["cloak-host"] = sha256 ? CloakHost("cloak.inspircd.org", '.') : broken;
- data["cloak-unix"] = sha256 ? CloakHost("/inspircd/cloak.sock", '/') : broken;
data["host-parts"] = ConvToStr(hostparts);
data["prefix"] = prefix;
data["suffix"] = suffix;
diff --git a/src/modules/m_spanningtree/capab.cpp b/src/modules/m_spanningtree/capab.cpp
index 14e90f987..5ae7f5ff0 100644
--- a/src/modules/m_spanningtree/capab.cpp
+++ b/src/modules/m_spanningtree/capab.cpp
@@ -57,7 +57,7 @@ namespace
modname.append(name.substr(0, endpos)).append(".so");
// Handle renamed modules.
- if (stdalgo::string::equalsci(modname, "m_cloak.so"))
+ if (stdalgo::string::equalsci(modname, "m_cloak.so") && ServerInstance->Modules.Find("cloak_md5"))
modname = "m_cloaking.so";
else if (stdalgo::string::equalsci(modname, "m_realnameban.so"))
modname = "m_gecosban.so";