summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules/sasl.h3
-rw-r--r--modules/protocol/inspircd.cpp10
-rw-r--r--modules/protocol/plexus.cpp12
-rw-r--r--modules/protocol/solanum.cpp12
-rw-r--r--modules/protocol/unrealircd.cpp11
-rw-r--r--modules/sasl.cpp17
6 files changed, 29 insertions, 36 deletions
diff --git a/include/modules/sasl.h b/include/modules/sasl.h
index 0f5cdf9b3..e5786b524 100644
--- a/include/modules/sasl.h
+++ b/include/modules/sasl.h
@@ -15,8 +15,7 @@ namespace SASL
Anope::string source;
Anope::string target;
Anope::string type;
- Anope::string data;
- Anope::string ext;
+ std::vector<Anope::string> data;
};
class Mechanism;
diff --git a/modules/protocol/inspircd.cpp b/modules/protocol/inspircd.cpp
index b88f0044f..b0e059d73 100644
--- a/modules/protocol/inspircd.cpp
+++ b/modules/protocol/inspircd.cpp
@@ -606,10 +606,9 @@ public:
void SendSASLMessage(const SASL::Message &message) override
{
- if (message.ext.empty())
- Uplink::Send("ENCAP", message.target.substr(0, 3), "SASL", message.source, message.target, message.type, message.data);
- else
- Uplink::Send("ENCAP", message.target.substr(0, 3), "SASL", message.source, message.target, message.type, message.data, message.ext);
+ auto newparams = message.data;
+ newparams.insert(newparams.begin(), { message.target.substr(0, 3), "SASL", message.source, message.target, message.type });
+ Uplink::SendInternal({}, Me, "ENCAP", newparams);
}
void SendSVSLogin(const Anope::string &uid, NickAlias *na) override
@@ -1797,8 +1796,7 @@ struct IRCDMessageSASL final
m.source = params[0];
m.target = params[1];
m.type = params[2];
- m.data = params[3];
- m.ext = params.size() > 4 ? params[4] : "";
+ m.data.assign(params.begin() + 3, params.end());
SASL::sasl->ProcessMessage(m);
}
};
diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp
index f2c7142da..252134470 100644
--- a/modules/protocol/plexus.cpp
+++ b/modules/protocol/plexus.cpp
@@ -178,10 +178,10 @@ public:
{
Server *s = Server::Find(message.target.substr(0, 3));
auto target = s ? s->GetName() : message.target.substr(0, 3);
- if (message.ext.empty())
- Uplink::Send("ENCAP", target, "SASL", message.source, message.target, message.type, message.data);
- else
- Uplink::Send("ENCAP", target, "SASL", message.source, message.target, message.type, message.data, message.ext);
+
+ auto newparams = message.data;
+ newparams.insert(newparams.begin(), { target, "SASL", message.source, message.target, message.type });
+ Uplink::SendInternal({}, Me, "ENCAP", newparams);
}
void SendSVSLogin(const Anope::string &uid, NickAlias *na) override
@@ -251,9 +251,7 @@ struct IRCDMessageEncap final
m.source = params[2];
m.target = params[3];
m.type = params[4];
- m.data = params[5];
- m.ext = params.size() > 6 ? params[6] : "";
-
+ m.data.assign(params.begin() + 5, params.end());
SASL::sasl->ProcessMessage(m);
}
diff --git a/modules/protocol/solanum.cpp b/modules/protocol/solanum.cpp
index d3656b570..fa05daf46 100644
--- a/modules/protocol/solanum.cpp
+++ b/modules/protocol/solanum.cpp
@@ -154,10 +154,10 @@ public:
{
Server *s = Server::Find(message.target.substr(0, 3));
auto target = s ? s->GetName() : message.target.substr(0, 3);
- if (message.ext.empty())
- Uplink::Send("ENCAP", target, "SASL", message.source, message.target, message.type, message.data);
- else
- Uplink::Send("ENCAP", target, "SASL", message.source, message.target, message.type, message.data, message.ext);
+
+ auto newparams = message.data;
+ newparams.insert(newparams.begin(), { target, "SASL", message.source, message.target, message.type });
+ Uplink::SendInternal({}, Me, "ENCAP", newparams);
}
void SendSVSLogin(const Anope::string &uid, NickAlias *na) override
@@ -221,9 +221,7 @@ struct IRCDMessageEncap final
m.source = params[2];
m.target = params[3];
m.type = params[4];
- m.data = params[5];
- m.ext = params.size() > 6 ? params[6] : "";
-
+ m.data.assign(params.begin() + 5, params.end());
SASL::sasl->ProcessMessage(m);
}
}
diff --git a/modules/protocol/unrealircd.cpp b/modules/protocol/unrealircd.cpp
index 9aab49c92..fa5f72f95 100644
--- a/modules/protocol/unrealircd.cpp
+++ b/modules/protocol/unrealircd.cpp
@@ -401,10 +401,9 @@ private:
distmask = message.target.substr(0, p);
}
- if (message.ext.empty())
- Uplink::Send(BotInfo::Find(message.source), "SASL", distmask, message.target, message.type, message.data);
- else
- Uplink::Send(BotInfo::Find(message.source), "SASL", distmask, message.target, message.type, message.data, message.ext);
+ auto newparams = message.data;
+ newparams.insert(newparams.begin(), { distmask, message.target, message.type });
+ Uplink::SendInternal({}, BotInfo::Find(message.source), "ENCAP", newparams);
}
void SendSVSLogin(const Anope::string &uid, NickAlias *na) override
@@ -1307,9 +1306,7 @@ struct IRCDMessageSASL final
m.source = params[1];
m.target = params[0];
m.type = params[2];
- m.data = params[3];
- m.ext = params.size() > 4 ? params[4] : "";
-
+ m.data.assign(params.begin() + 3, params.end());
SASL::sasl->ProcessMessage(m);
}
};
diff --git a/modules/sasl.cpp b/modules/sasl.cpp
index 3c85aafd8..cb146d055 100644
--- a/modules/sasl.cpp
+++ b/modules/sasl.cpp
@@ -28,7 +28,7 @@ public:
{
// message = [authzid] UTF8NUL authcid UTF8NUL passwd
Anope::string message;
- Anope::B64Decode(m.data, message);
+ Anope::B64Decode(m.data[0], message);
size_t zcsep = message.find('\0');
if (zcsep == Anope::string::npos)
@@ -89,7 +89,7 @@ public:
if (m.type == "S")
{
- mysess->cert = m.ext;
+ mysess->cert = m.data.size() > 1 ? "" : m.data[1];
sasl->SendMessage(sess, "C", "+");
}
@@ -132,7 +132,7 @@ public:
else if (m.type == "C")
{
Anope::string decoded;
- Anope::B64Decode(m.data, decoded);
+ Anope::B64Decode(m.data[0], decoded);
Anope::string user = "A user";
if (!sess->hostname.empty() && !sess->ip.empty())
@@ -168,6 +168,9 @@ public:
void ProcessMessage(const SASL::Message &m) override
{
+ if (m.data.empty())
+ return; // Malformed.
+
if (m.target != "*")
{
Server *s = Server::Find(m.target);
@@ -183,7 +186,7 @@ public:
if (m.type == "S")
{
- ServiceReference<Mechanism> mech("SASL::Mechanism", m.data);
+ ServiceReference<Mechanism> mech("SASL::Mechanism", m.data[0]);
if (!mech)
{
Session tmp(NULL, m.source);
@@ -223,8 +226,8 @@ public:
session = new Session(NULL, m.source);
sessions[m.source] = session;
}
- session->hostname = m.data;
- session->ip = m.ext;
+ session->hostname = m.data[0];
+ session->ip = m.data.size() > 1 ? m.data[1] : "";
}
if (session && session->mech)
@@ -279,7 +282,7 @@ public:
msg.source = this->GetAgent();
msg.target = session->uid;
msg.type = mtype;
- msg.data = data;
+ msg.data.push_back(data);
IRCD->SendSASLMessage(msg);
}