aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-06-06 00:57:07 +0100
committerGravatar Sadie Powell2023-06-06 01:02:14 +0100
commitacc9f5228f686ea816db38d8ecb1925adc053984 (patch)
tree3cdb53b7740689be56493f1929a03e6137ee4d09 /src
parentMerge branch 'insp3' into master. (diff)
Allow secondary cloak methods to be used on link synchronisation.
If a server has a conditional cloak method (e.g. account) as the primary cloak method it doesn't make sense to use it for link consistency. With this change a secondary cloak method can request that it is used instead of the primary if the primary does not mark itself as link sensitive.
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_cloak.cpp16
-rw-r--r--src/modules/m_cloak_md5.cpp6
-rw-r--r--src/modules/m_cloak_sha256.cpp5
3 files changed, 26 insertions, 1 deletions
diff --git a/src/modules/m_cloak.cpp b/src/modules/m_cloak.cpp
index e94a3a33d..6b4dddad3 100644
--- a/src/modules/m_cloak.cpp
+++ b/src/modules/m_cloak.cpp
@@ -321,7 +321,21 @@ public:
if (cloakmethods.empty())
return;
- auto& cloakmethod = cloakmethods.front();
+ Cloak::MethodPtr cloakmethod;
+ for (const auto& method : cloakmethods)
+ {
+ if (method->IsLinkSensitive())
+ {
+ // This cloak method really wants to be the link method so prefer it.
+ cloakmethod = method;
+ break;
+ }
+ }
+
+ // If no methods are link sensitive we just use the first.
+ if (!cloakmethod)
+ cloakmethod = cloakmethods.front();
+
cloakmethod->GetLinkData(data, compatdata);
data["method"] = cloakmethod->GetName();
diff --git a/src/modules/m_cloak_md5.cpp b/src/modules/m_cloak_md5.cpp
index f09a651b4..286ea6a50 100644
--- a/src/modules/m_cloak_md5.cpp
+++ b/src/modules/m_cloak_md5.cpp
@@ -227,6 +227,12 @@ struct CloakInfo final
compatdata = GetCompatLinkData();
}
+ bool IsLinkSensitive() const override
+ {
+ // This method always wants to be at the front.
+ return true;
+ }
+
std::string GenCloak(const irc::sockets::sockaddrs& ip, const std::string& ipstr, const std::string& host)
{
std::string chost;
diff --git a/src/modules/m_cloak_sha256.cpp b/src/modules/m_cloak_sha256.cpp
index 92e3ca964..cabb19748 100644
--- a/src/modules/m_cloak_sha256.cpp
+++ b/src/modules/m_cloak_sha256.cpp
@@ -263,7 +263,12 @@ public:
#else
data["using-psl"] = "no";
#endif
+ }
+ bool IsLinkSensitive() const override
+ {
+ // This method always wants to be at the front.
+ return true;
}
};