From ee1325cf9ddcb47b2d2c1b79093e0fa5a38b75c7 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 23 May 2021 01:53:34 +0100 Subject: Fire OnUserPreJoin regardless of whether the join is an override. --- src/modules/m_banredirect.cpp | 4 ++-- src/modules/m_cban.cpp | 6 ++++-- src/modules/m_denychans.cpp | 5 ++++- src/modules/m_joinflood.cpp | 4 ++-- src/modules/m_kicknorejoin.cpp | 4 ++-- src/modules/m_ojoin.cpp | 2 +- src/modules/m_operchans.cpp | 4 ++-- src/modules/m_operprefix.cpp | 2 +- src/modules/m_override.cpp | 4 ++-- src/modules/m_redirect.cpp | 4 ++-- src/modules/m_restrictchans.cpp | 4 ++-- src/modules/m_services_account.cpp | 5 ++++- src/modules/m_sslmodes.cpp | 4 ++-- 13 files changed, 30 insertions(+), 22 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_banredirect.cpp b/src/modules/m_banredirect.cpp index 3b5e3fdd5..91a2a5ce2 100644 --- a/src/modules/m_banredirect.cpp +++ b/src/modules/m_banredirect.cpp @@ -285,9 +285,9 @@ class ModuleBanRedirect : public Module } } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (chan) + if (!override && chan) { BanRedirectList* redirects = re.extItem.Get(chan); diff --git a/src/modules/m_cban.cpp b/src/modules/m_cban.cpp index 43b6742fd..869a5a5e6 100644 --- a/src/modules/m_cban.cpp +++ b/src/modules/m_cban.cpp @@ -191,10 +191,12 @@ class ModuleCBan : public Module, public Stats::EventListener return MOD_RES_DENY; } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - XLine *rl = ServerInstance->XLines->MatchesLine("CBAN", cname); + if (override) + return MOD_RES_PASSTHRU; + XLine *rl = ServerInstance->XLines->MatchesLine("CBAN", cname); if (rl) { // Channel is banned. diff --git a/src/modules/m_denychans.cpp b/src/modules/m_denychans.cpp index c316a9da4..9e7454c0e 100644 --- a/src/modules/m_denychans.cpp +++ b/src/modules/m_denychans.cpp @@ -144,8 +144,11 @@ class ModuleDenyChannels : public Module goodchannels.swap(goodchans); } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { + if (!override) + return MOD_RES_PASSTHRU; + for (const auto& badchan : badchannels) { // If the channel does not match the current entry we have nothing else to do. diff --git a/src/modules/m_joinflood.cpp b/src/modules/m_joinflood.cpp index 52991d3a7..47f904620 100644 --- a/src/modules/m_joinflood.cpp +++ b/src/modules/m_joinflood.cpp @@ -168,9 +168,9 @@ class ModuleJoinFlood ignoreuntil = ServerInstance->Time() + splitwait; } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (chan) + if (!override && chan) { joinfloodsettings *f = jf.ext.Get(chan); if (f && f->islocked()) diff --git a/src/modules/m_kicknorejoin.cpp b/src/modules/m_kicknorejoin.cpp index 78a5031e4..321ad7659 100644 --- a/src/modules/m_kicknorejoin.cpp +++ b/src/modules/m_kicknorejoin.cpp @@ -138,9 +138,9 @@ public: { } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (chan) + if (!override && chan) { const KickRejoinData* data = kr.ext.Get(chan); if ((data) && !invapi->IsInvited(user, chan) && (!data->canjoin(user))) diff --git a/src/modules/m_ojoin.cpp b/src/modules/m_ojoin.cpp index aed598231..3238db3eb 100644 --- a/src/modules/m_ojoin.cpp +++ b/src/modules/m_ojoin.cpp @@ -118,7 +118,7 @@ class ModuleOjoin : public Module { } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { if (mycommand.active) { diff --git a/src/modules/m_operchans.cpp b/src/modules/m_operchans.cpp index 4f5a0f74c..2b69b2f09 100644 --- a/src/modules/m_operchans.cpp +++ b/src/modules/m_operchans.cpp @@ -75,9 +75,9 @@ class ModuleOperChans { } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (chan && chan->IsModeSet(oc) && !user->IsOper()) + if (!override && chan && chan->IsModeSet(oc) && !user->IsOper()) { user->WriteNumeric(ERR_CANTJOINOPERSONLY, chan->name, InspIRCd::Format("Only server operators may join %s (+O is set)", chan->name.c_str())); return MOD_RES_DENY; diff --git a/src/modules/m_operprefix.cpp b/src/modules/m_operprefix.cpp index a32909241..e32eb52b7 100644 --- a/src/modules/m_operprefix.cpp +++ b/src/modules/m_operprefix.cpp @@ -72,7 +72,7 @@ class ModuleOperPrefixMode : public Module */ } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { if ((user->IsOper()) && (!user->IsModeSet(hideopermode))) privs.push_back('y'); diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp index 60aa866d9..b0022b207 100644 --- a/src/modules/m_override.cpp +++ b/src/modules/m_override.cpp @@ -188,9 +188,9 @@ class ModuleOverride return MOD_RES_PASSTHRU; } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (user->IsOper()) + if (user->IsOper() && !override) { if (chan) { diff --git a/src/modules/m_redirect.cpp b/src/modules/m_redirect.cpp index 166c89da4..ea295db03 100644 --- a/src/modules/m_redirect.cpp +++ b/src/modules/m_redirect.cpp @@ -95,9 +95,9 @@ class ModuleRedirect : public Module { } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if (chan) + if (!override && chan) { if (chan->IsModeSet(re) && chan->IsModeSet(limitmode)) { diff --git a/src/modules/m_restrictchans.cpp b/src/modules/m_restrictchans.cpp index 5b589442e..b6e78ba40 100644 --- a/src/modules/m_restrictchans.cpp +++ b/src/modules/m_restrictchans.cpp @@ -76,10 +76,10 @@ class ModuleRestrictChans : public Module allowregistered = tag->getBool("allowregistered", false); } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { // channel does not yet exist (record is null, about to be created IF we were to allow it) - if (!chan && !CanCreateChannel(user, cname)) + if (!override && !chan && !CanCreateChannel(user, cname)) { user->WriteNumeric(ERR_BANNEDFROMCHAN, cname, "You are not allowed to create new channels."); return MOD_RES_DENY; diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index cdef9ec04..4f9f08c00 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -294,8 +294,11 @@ class ModuleServicesAccount return HandleMessage(user, target); } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { + if (override) + return MOD_RES_PASSTHRU; + std::string *account = accountname.Get(user); bool is_registered = account && !account->empty(); diff --git a/src/modules/m_sslmodes.cpp b/src/modules/m_sslmodes.cpp index f84cf2be6..225734db0 100644 --- a/src/modules/m_sslmodes.cpp +++ b/src/modules/m_sslmodes.cpp @@ -183,9 +183,9 @@ class ModuleSSLModes { } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) override + ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven, bool override) override { - if(chan && chan->IsModeSet(sslm)) + if (!override && chan && chan->IsModeSet(sslm)) { if (!api) { -- cgit v1.3.1-10-gc9f91