X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services_account.cpp;h=154968e9ec274b38ca22bd9820d47aaa8d61f6d0;hb=a5d110282a864fd2e91b51ce360a977cd0643657;hp=cb3f089c6c6c7376a957135021172f3b885be262;hpb=ac705cd20e12f46bd638093f000dfd541ffc5d22;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index cb3f089c6..154968e9e 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -112,9 +112,29 @@ class ModuleServicesAccount : public Module Channel_r m4; User_r m5; 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) + accountname("accountname", this), checking_ban(false) { } @@ -199,8 +219,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 +239,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; @@ -281,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(); }