diff options
author | Sadie Powell <sadie@witchery.services> | 2025-02-05 13:23:50 +0000 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2025-02-05 13:45:15 +0000 |
commit | 115c9eb5a0c5f604ef35cbb906f3603f26e5279c (patch) | |
tree | 544cfbb8f904c37f7f7812ca527f35387ae7b09f | |
parent | ee18083bb780fc3dd9ff8af221d970e4cd61a619 (diff) |
Merge the SASL data and ext parameters.
There might be more than this so its better to just store it in a
1+ parameter vector.
-rw-r--r-- | include/modules/sasl.h | 3 | ||||
-rw-r--r-- | modules/protocol/inspircd.cpp | 10 | ||||
-rw-r--r-- | modules/protocol/plexus.cpp | 12 | ||||
-rw-r--r-- | modules/protocol/solanum.cpp | 12 | ||||
-rw-r--r-- | modules/protocol/unrealircd.cpp | 11 | ||||
-rw-r--r-- | modules/sasl.cpp | 17 |
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); } |