From b8440f4a023069e31f0af75dd9c15af3c3f9a26c Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Sun, 15 Sep 2013 16:54:34 +0200 Subject: Work around STB_GNU_UNIQUE symbols not allowing module unmap --- src/modules/m_services_account.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/modules/m_services_account.cpp') diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index cb3f089c6..a139087a5 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -112,9 +112,11 @@ class ModuleServicesAccount : public Module Channel_r m4; User_r m5; AccountExtItem accountname; + bool checking_ban; + public: ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this), - accountname("accountname", this) + accountname("accountname", this), checking_ban(false) { } @@ -199,8 +201,7 @@ class ModuleServicesAccount : public Module ModResult OnCheckBan(User* user, Channel* chan, const std::string& mask) { - static bool checking = false; - if (checking) + if (checking_ban) return MOD_RES_PASSTHRU; if ((mask.length() > 2) && (mask[1] == ':')) @@ -220,9 +221,9 @@ class ModuleServicesAccount : public Module /* If we made it this far we know the user isn't registered so just deny if it matches */ - checking = true; + checking_ban = true; bool result = chan->CheckBan(user, mask.substr(2)); - checking = false; + checking_ban = false; if (result) return MOD_RES_DENY; -- cgit v1.3.1-10-gc9f91 From 44301db24589223e10fc898fb3ca6ec9f57a9bd5 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 20 Jan 2014 16:40:01 +0100 Subject: m_services_account Add workaround for wrong host being displayed in numeric when cgiirc users log in using SASL --- src/modules/m_services_account.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'src/modules/m_services_account.cpp') 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(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(); } -- cgit v1.3.1-10-gc9f91