summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/protocol/inspircd12.cpp26
-rw-r--r--modules/protocol/inspircd20.cpp26
-rw-r--r--modules/protocol/plexus.cpp42
3 files changed, 93 insertions, 1 deletions
diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp
index cedab07bf..62df416b1 100644
--- a/modules/protocol/inspircd12.cpp
+++ b/modules/protocol/inspircd12.cpp
@@ -302,6 +302,13 @@ bool event_chghost(const Anope::string &source, const std::vector<Anope::string>
return true;
}
+
+/*
+ * source = numeric of the sending server
+ * params[0] = uuid
+ * params[1] = metadata name
+ * params[2] = data
+ */
bool event_metadata(const Anope::string &source, const std::vector<Anope::string> &params)
{
if (params.size() < 3)
@@ -316,6 +323,25 @@ bool event_metadata(const Anope::string &source, const std::vector<Anope::string
}
}
+/*
+ * possible incoming ssl_cert messages:
+ * Received: :409 METADATA 409AAAAAA ssl_cert :vTrSe c38070ce96e41cc144ed6590a68d45a6 <...> <...>
+ * Received: :409 METADATA 409AAAAAC ssl_cert :vTrSE Could not get peer certificate: error:00000000:lib(0):func(0):reason(0)
+ */
+ if (params[1].equals_cs("ssl_cert"))
+ {
+ User *u = finduser(params[0]);
+ if (!u)
+ return true;
+ std::string data = params[2].c_str();
+ size_t pos1 = data.find(' ') + 1;
+ size_t pos2 = data.find(' ', pos1);
+ if (u && ((pos2 - pos1) == 32)) // fingerprints should always be 32 bytes in size
+ {
+ u->fingerprint = data.substr(pos1, pos2 - pos1);
+ FOREACH_MOD(I_OnFingerprint, OnFingerprint(u));
+ }
+ }
return true;
}
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp
index bd020891d..20e622092 100644
--- a/modules/protocol/inspircd20.cpp
+++ b/modules/protocol/inspircd20.cpp
@@ -317,6 +317,13 @@ bool event_chghost(const Anope::string &source, const std::vector<Anope::string>
return true;
}
+
+/*
+ * source = numeric of the sending server
+ * params[0] = uuid
+ * params[1] = metadata name
+ * params[2] = data
+ */
bool event_metadata(const Anope::string &source, const std::vector<Anope::string> &params)
{
if (params.size() < 3)
@@ -331,6 +338,25 @@ bool event_metadata(const Anope::string &source, const std::vector<Anope::string
}
}
+/*
+ * possible incoming ssl_cert messages:
+ * Received: :409 METADATA 409AAAAAA ssl_cert :vTrSe c38070ce96e41cc144ed6590a68d45a6 <...> <...>
+ * Received: :409 METADATA 409AAAAAC ssl_cert :vTrSE Could not get peer certificate: error:00000000:lib(0):func(0):reason(0)
+ */
+ if (params[1].equals_cs("ssl_cert"))
+ {
+ User *u = finduser(params[0]);
+ if (!u)
+ return true;
+ std::string data = params[2].c_str();
+ size_t pos1 = data.find(' ') + 1;
+ size_t pos2 = data.find(' ', pos1);
+ if ((pos2 - pos1) == 32) // fingerprints should always be 32 bytes in size
+ {
+ u->fingerprint = data.substr(pos1, pos2 - pos1);
+ FOREACH_MOD(I_OnFingerprint, OnFingerprint(u));
+ }
+ }
return true;
}
diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp
index 797f2f09c..1d9a911ce 100644
--- a/modules/protocol/plexus.cpp
+++ b/modules/protocol/plexus.cpp
@@ -554,6 +554,46 @@ bool event_bmask(const Anope::string &source, const std::vector<Anope::string> &
return true;
}
+bool event_encap(const Anope::string &sourcd, const std::vector<Anope::string> &params)
+{
+ if (params.size() < 4)
+ return true;
+/*
+ * Received: :dev.anope.de ENCAP * SU DukePyrolator DukePyrolator
+ * params[0] = *
+ * params[1] = SU
+ * params[2] = nickname
+ * params[3] = account
+ */
+ if (params[1].equals_cs("SU"))
+ {
+ User *u = finduser(params[2]);
+ NickCore *nc = findcore(params[3]);
+ if (u && nc)
+ {
+ u->Login(nc);
+ }
+ }
+/*
+ * Received: :dev.anope.de ENCAP * CERTFP DukePyrolator :3F122A9CC7811DBAD3566BF2CEC3009007C0868F
+ * params[0] = *
+ * params[1] = CERTFP
+ * params[2] = nickname
+ * params[3] = fingerprint
+ */
+ if (params[1].equals_cs("CERTFP"))
+ {
+ User *u = finduser(params[2]);
+ if (u)
+ {
+ u->fingerprint = params[3];
+ FOREACH_MOD(I_OnFingerprint, OnFingerprint(u));
+ }
+ }
+ return true;
+}
+
+
static void AddModes()
{
/* Add user modes */
@@ -617,7 +657,7 @@ class ProtoPlexus : public Module
ProtoPlexus(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
message_tmode("TMODE", event_tmode), message_bmask("BMASK", event_bmask),
message_pass("PASS", event_pass), message_tb("TB", event_tburst),
- message_sid("SID", event_sid)
+ message_sid("SID", event_sid), message_encap("ENCAP", event_encap);
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);