summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2017-02-26 16:59:16 -0500
committerAdam <Adam@anope.org>2017-02-26 16:59:22 -0500
commitfc46f1790f17414536c4a0f4c8417079317ae5db (patch)
tree6d88e3a5e7f6416b57bad1885242e3315abeef3b /src/modules
parentd0cd749a70646f2c2bbd616a9934fada22ad1ffd (diff)
m_sasl: use host/ip from m_cgiirc if applicable
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_sasl.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/src/modules/m_sasl.cpp b/src/modules/m_sasl.cpp
index db96f9dfa..5afab9502 100644
--- a/src/modules/m_sasl.cpp
+++ b/src/modules/m_sasl.cpp
@@ -51,16 +51,53 @@ class SaslAuthenticator
SaslResult result;
bool state_announced;
+ /* taken from m_services_account */
+ static bool ReadCGIIRCExt(const char* extname, User* user, std::string& out)
+ {
+ ExtensionItem* wiext = ServerInstance->Extensions.GetItem(extname);
+ if (!wiext)
+ return false;
+
+ if (wiext->creator->ModuleSourceFile != "m_cgiirc.so")
+ return false;
+
+ StringExtItem* stringext = static_cast<StringExtItem*>(wiext);
+ std::string* addr = stringext->get(user);
+ if (!addr)
+ return false;
+
+ out = *addr;
+ return true;
+ }
+
+
void SendHostIP()
{
+ std::string host, ip;
+
+ if (!ReadCGIIRCExt("cgiirc_webirc_hostname", user, host))
+ {
+ host = user->host;
+ }
+ if (!ReadCGIIRCExt("cgiirc_webirc_ip", user, ip))
+ {
+ ip = user->GetIPString();
+ }
+ else
+ {
+ /* IP addresses starting with a : on irc are a Bad Thing (tm) */
+ if (ip.c_str()[0] == ':')
+ ip.insert(ip.begin(),1,'0');
+ }
+
parameterlist params;
params.push_back(sasl_target);
params.push_back("SASL");
params.push_back(user->uuid);
params.push_back("*");
params.push_back("H");
- params.push_back(user->host);
- params.push_back(user->GetIPString());
+ params.push_back(host);
+ params.push_back(ip);
SendSASL(params);
}