diff options
author | Attila Molnar <attilamolnar@hush.com> | 2014-01-20 16:40:01 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2014-01-20 16:40:01 +0100 |
commit | 44301db24589223e10fc898fb3ca6ec9f57a9bd5 (patch) | |
tree | ebc8cf27afdabbbb151e2e9dfa9d1d414978274f | |
parent | 3bf44246023cba92ce68445ff7be6f4690079a46 (diff) |
m_services_account Add workaround for wrong host being displayed in numeric when cgiirc users log in using SASL
-rw-r--r-- | src/modules/m_services_account.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index a139087a5..154968e9e 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -114,6 +114,24 @@ class ModuleServicesAccount : public Module AccountExtItem accountname; bool checking_ban; + static bool ReadCGIIRCExt(const char* extname, User* user, const 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; + } + public: ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this), accountname("accountname", this), checking_ban(false) @@ -282,8 +300,19 @@ class ModuleServicesAccount : public Module trim(*account); if (IS_LOCAL(dest)) - dest->WriteNumeric(900, "%s %s %s :You are now logged in as %s", - dest->nick.c_str(), dest->GetFullHost().c_str(), account->c_str(), account->c_str()); + { + const std::string* host = &dest->dhost; + if (dest->registered != REG_ALL) + { + if (!ReadCGIIRCExt("cgiirc_webirc_hostname", dest, host)) + { + ReadCGIIRCExt("cgiirc_webirc_ip", dest, host); + } + } + + dest->WriteNumeric(900, "%s %s!%s@%s %s :You are now logged in as %s", + dest->nick.c_str(), dest->nick.c_str(), dest->ident.c_str(), host->c_str(), account->c_str(), account->c_str()); + } AccountEvent(this, dest, *account).Send(); } |