diff --git a/4/m_antiknocker.cpp b/4/m_antiknocker.cpp index e2b49cad..5eaf76b8 100644 --- a/4/m_antiknocker.cpp +++ b/4/m_antiknocker.cpp @@ -17,7 +17,7 @@ */ /// $ModAuthor: Sadie Powell -/// $ModConfig: +/// $ModConfig: /// $ModDesc: Attempts to block a common IRC spambot. /// $ModDepends: core 4 @@ -33,6 +33,7 @@ class ModuleAntiKnocker final { public: bool docmd; + bool dokill; bool donick; bool donotice; bool doshun; @@ -56,12 +57,15 @@ class ModuleAntiKnocker final delete sh; } - std::string message; - if (!user->IsFullyConnected()) - message = "Connection timeout"; - else - message = INSP_FORMAT("Ping timeout: {} seconds", user->GetClass()->pingtime); - ServerInstance->Users.QuitUser(user, message); + if (dokill) + { + std::string message; + if (!user->IsFullyConnected()) + message = "Connection timeout"; + else + message = INSP_FORMAT("Ping timeout: {} seconds", user->GetClass()->pingtime); + ServerInstance->Users.QuitUser(user, message); + } } ModuleAntiKnocker() @@ -87,6 +91,7 @@ class ModuleAntiKnocker final } docmd = tag->getBool("docmd", true); + dokill = tag->getBool("dokill", true); donick = tag->getBool("donick", true); donotice = tag->getBool("donotice", true); doshun = tag->getBool("doshun", true); diff --git a/4/m_conn_banner.cpp b/4/m_conn_banner.cpp new file mode 100644 index 00000000..70f771ae --- /dev/null +++ b/4/m_conn_banner.cpp @@ -0,0 +1,52 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2012 Attila Molnar + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/// $ModAuthor: Attila Molnar +/// $ModConfig: +/// $ModDepends: core 4 +/// $ModDesc: Displays a static text to every connecting user before registration + + +#include "inspircd.h" + +class ModuleConnBanner final + : public Module +{ +private: + std::string text; + +public: + ModuleConnBanner() + : Module(VF_NONE, "Displays a static text to every connecting user before registration") + { + } + + void ReadConfig(ConfigStatus& status) override + { + const auto& tag = ServerInstance->Config->ConfValue("connbanner"); + text = tag->getString("text"); + } + + void OnUserPostInit(LocalUser* user) override + { + if (!text.empty()) + user->WriteNotice("*** " + text); + } +}; + +MODULE_INIT(ModuleConnBanner) diff --git a/4/m_cve_2024_39844.cpp b/4/m_cve_2024_39844.cpp index 56559486..f66f0cec 100644 --- a/4/m_cve_2024_39844.cpp +++ b/4/m_cve_2024_39844.cpp @@ -17,8 +17,7 @@ */ -/// $ModAuthor: Sadie Powell -/// $ModAuthorMail: sadie@witchery.services +/// $ModAuthor: Sadie Powell /// $ModDesc: Prevents clients from sending messages that trigger CVE-2024-39844. /// $ModDepends: core 4 diff --git a/4/m_hideidle.cpp b/4/m_hideidle.cpp new file mode 100644 index 00000000..e71648fa --- /dev/null +++ b/4/m_hideidle.cpp @@ -0,0 +1,60 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2010-2012 Attila Molnar + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/// $ModAuthor: Attila Molnar +/// $ModDepends: core 4 +/// $ModDesc: Provides the +a usermode that hides idle and signon time in WHOIS from non-opers + + +#include "inspircd.h" +#include "modules/whois.h" + +class ModuleHideIdle final + : public Module + , public Whois::LineEventListener +{ +private: + SimpleUserMode hideidle; + +public: + ModuleHideIdle() + : Module(VF_NONE, "Provides the +a usermode that hides idle and signon time in WHOIS from non-opers") + , Whois::LineEventListener(this) + , hideidle(this, "hideidle", 'a') + { + } + + ModResult OnWhoisLine(Whois::Context& whois, Numeric::Numeric& numeric) override + { + if (numeric.GetNumeric() != RPL_WHOISIDLE) + return MOD_RES_PASSTHRU; + + if (whois.GetSource() == whois.GetTarget()) + return MOD_RES_PASSTHRU; + + if (!whois.GetTarget()->IsModeSet(hideidle)) + return MOD_RES_PASSTHRU; + + if (!whois.GetSource()->HasPrivPermission("users/auspex")) + return MOD_RES_DENY; + + return MOD_RES_PASSTHRU; + } +}; + +MODULE_INIT(ModuleHideIdle) diff --git a/4/m_ircv3_extjwt.cpp b/4/m_ircv3_extjwt.cpp index c0483642..141f82bc 100644 --- a/4/m_ircv3_extjwt.cpp +++ b/4/m_ircv3_extjwt.cpp @@ -18,11 +18,13 @@ /// $CompilerFlags: find_compiler_flags("RapidJSON") -/// $ModAuthor: Sadie Powell -/// $ModAuthorMail: sadie@witchery.services +/// $ModAuthor: Sadie Powell /// $ModDepends: core 4 /// $ModDesc: Provides the DRAFT extjwt IRCv3 extension. +/// $PackageInfo: require_system("debian~") rapidjson-dev +/// $PackageInfo: require_system("darwin") rapidjson + #include "inspircd.h" #include "modules/account.h" #include "modules/hash.h" diff --git a/4/m_qrcode.cpp b/4/m_qrcode.cpp index 342e9b7d..e4c28c1b 100644 --- a/4/m_qrcode.cpp +++ b/4/m_qrcode.cpp @@ -20,10 +20,9 @@ /// $LinkerFlags: find_linker_flags("libqrencode") /// $PackageInfo: require_system("arch") qrencode pkgconf -/// $PackageInfo: require_system("centos") qrencode-devel pkgconfig /// $PackageInfo: require_system("darwin") qrencode pkg-config -/// $PackageInfo: require_system("debian") libqrencode-dev pkg-config -/// $PackageInfo: require_system("ubuntu") libqrencode-dev pkg-config +/// $PackageInfo: require_system("debian~") libqrencode-dev pkg-config +/// $PackageInfo: require_system("rhel~") qrencode-devel pkgconfig /// $ModAuthor: Sadie Powell /// $ModDesc: Provides support for QR code generation via the /QRCODE command. diff --git a/4/m_regex_pcre.cpp b/4/m_regex_pcre.cpp index 97d176a6..a94e65ab 100644 --- a/4/m_regex_pcre.cpp +++ b/4/m_regex_pcre.cpp @@ -30,10 +30,9 @@ /// $LinkerFlags: execute("pcre-config --libs" "PCRE_LDFLAGS" "-lpcre") /// $PackageInfo: require_system("arch") pcre -/// $PackageInfo: require_system("centos") pcre-devel /// $PackageInfo: require_system("darwin") pcre -/// $PackageInfo: require_system("debian") libpcre3-dev -/// $PackageInfo: require_system("ubuntu") libpcre3-dev +/// $PackageInfo: require_system("debian~") libpcre3-dev +/// $PackageInfo: require_system("rhel~") pcre-devel #include "inspircd.h" diff --git a/4/m_regex_tre.cpp b/4/m_regex_tre.cpp index 11af687b..b019f005 100644 --- a/4/m_regex_tre.cpp +++ b/4/m_regex_tre.cpp @@ -30,8 +30,7 @@ /// $PackageInfo: require_system("arch") pkgconf tre /// $PackageInfo: require_system("darwin") pkg-config tre -/// $PackageInfo: require_system("debian") libtre-dev pkg-config -/// $PackageInfo: require_system("ubuntu") libtre-dev pkg-config +/// $PackageInfo: require_system("debian~") libtre-dev pkg-config #include "inspircd.h" diff --git a/4/m_require_auth.cpp b/4/m_require_auth.cpp new file mode 100644 index 00000000..979a27b9 --- /dev/null +++ b/4/m_require_auth.cpp @@ -0,0 +1,314 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2014 WindowsUser + * Based off the core xline methods and partially the services account module. + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/// $ModAuthor: WindowsUser +/// $ModDesc: Gives /ALINE and /GALINE, short for auth-lines. Users affected by these will have to use SASL to connect, while any users already connected but not identified to services will be disconnected in a similar manner to G-lines. +/// $ModDepends: core 4 + +#include "inspircd.h" +#include "timeutils.h" +#include "modules/account.h" +#include "modules/stats.h" +#include "xline.h" + +Account::API* g_accountapi = nullptr; + +static bool isLoggedIn(const User* user) +{ + return *g_accountapi && (*g_accountapi)->GetAccountName(user); +} + +class GALine : public XLine +{ + protected: + /** Ident mask (ident part only) + */ + std::string identmask; + /** Host mask (host part only) + */ + std::string hostmask; + + std::string matchtext; + + public: + GALine(time_t s_time, long d, const std::string& src, const std::string& re, const std::string& ident, const std::string& host, std::string othertext = "GA") + : XLine(s_time, d, src, re, othertext), identmask(ident), hostmask(host) + { + matchtext = identmask; + matchtext.append("@").append(this->hostmask); + } + + void Apply(User* u) override + { + if (!isLoggedIn(u)) + { + u->WriteNotice("*** NOTICE -- You need to identify via SASL to use this server (your host is " + type + "-lined)."); + ServerInstance->Users.QuitUser(u, type + "-lined: "+this->reason); + } + } + + void DisplayExpiry() override + { + ServerInstance->SNO.WriteToSnoMask('x', "Removing expired {}-line {}@{} (set by {} {} ago): {}", + type, identmask, hostmask, source, Duration::ToString(ServerInstance->Time() - this->set_time), reason); + } + + bool Matches(User* u) const override + { + LocalUser* lu = IS_LOCAL(u); + if (lu && lu->exempt) + return false; + + if (InspIRCd::Match(u->GetRealUser(), this->identmask, ascii_case_insensitive_map)) + { + if (InspIRCd::MatchCIDR(u->GetRealHost(), this->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(u->GetAddress(), this->hostmask, ascii_case_insensitive_map)) + { + return true; + } + } + + return false; + } + + bool Matches(const std::string& s) const override + { + return (matchtext == s); + } + + const std::string& Displayable() const override + { + return matchtext; + } +}; + +class ALine : public GALine +{ + public: + ALine(time_t s_time, long d, const std::string& src, const std::string& re, const std::string& ident, const std::string& host) + : GALine(s_time, d, src, re, ident, host, "A") {} + + bool IsBurstable() override + { + return false; + } +}; + +class ALineFactory : public XLineFactory +{ + public: + ALineFactory() : XLineFactory("A") { } + + /** Generate an ALine + */ + ALine* Generate(time_t set_time, unsigned long duration, const std::string& source, const std::string& reason, const std::string& xline_specific_mask) override + { + auto ih = ServerInstance->XLines->SplitUserHost(xline_specific_mask); + return new ALine(set_time, duration, source, reason, ih.first, ih.second); + } +}; + +class GALineFactory : public XLineFactory +{ + public: + GALineFactory() : XLineFactory("GA") { } + + /** Generate a GALine + */ + GALine* Generate(time_t set_time, unsigned long duration, const std::string& source, const std::string& reason, const std::string& xline_specific_mask) override + { + auto ih = ServerInstance->XLines->SplitUserHost(xline_specific_mask); + return new GALine(set_time, duration, source, reason, ih.first, ih.second); + } +}; + +class CommandGALine: public Command +{ + protected: + std::string linename; + char statschar; + + public: + CommandGALine(Module* c, const std::string& linetype = "GA", char stats = 'A') + : Command(c, linetype+"LINE", 1, 3) + { + access_needed = CmdAccess::OPERATOR; + this->syntax = { " [ :]" }; + this->linename = linetype; + statschar = stats; + } + + CmdResult Handle(User* user, const Params& parameters) override + { + std::string target = parameters[0]; + if (parameters.size() >= 3) + { + UserHostPair ih; + User* find = ServerInstance->Users.FindNick(target, true); + if (find) + { + ih.first = "*"; + ih.second = find->GetAddress(); + target = std::string("*@") + find->GetAddress(); + } + else + ih = ServerInstance->XLines->SplitUserHost(target); + + if (ih.first.empty()) + { + user->WriteNotice("*** Target not found."); + return CmdResult::FAILURE; + } + + else if (target.find('!') != std::string::npos) + { + user->WriteNotice(linename + "-line cannot operate on nick!user@host masks."); + return CmdResult::FAILURE; + } + + XLineFactory* xlf = ServerInstance->XLines->GetFactory(linename); + if (!xlf) + return CmdResult::FAILURE; + + unsigned long duration; + if (!Duration::TryFrom(parameters[1], duration)) + { + user->WriteNotice("*** Invalid duration for " + linename + "-line."); + return CmdResult::FAILURE; + } + XLine* al = xlf->Generate(ServerInstance->Time(), duration, user->nick, parameters[2], target); + if (ServerInstance->XLines->AddLine(al, user)) + { + if (!duration) + { + ServerInstance->SNO.WriteToSnoMask('x', "{} added permanent {}-line for {}: {}", + user->nick, linename, target, parameters[2]); + } + else + { + ServerInstance->SNO.WriteToSnoMask('x', "{} added timed {}-line for {}, expires in {} (on {}): {}", + user->nick, linename, target, Duration::ToString(duration), + Time::ToString(ServerInstance->Time() + duration), parameters[2]); + } + ServerInstance->XLines->ApplyLines(); + } + else + { + delete al; + user->WriteNotice("*** " + linename + "-line for " + target + " already exists."); + } + } + else + { + std::string reason; + if (ServerInstance->XLines->DelLine(target.c_str(), linename, reason, user)) + { + ServerInstance->SNO.WriteToSnoMask('x', "{} removed {}-line on {}: {}", + user->nick, linename, target, reason); + } + else + { + user->WriteNotice("*** " + linename + "-line " + target + " not found in list, try /stats " + ConvToStr(statschar) + "."); + } + } + + return CmdResult::SUCCESS; + } + +}; + +class CommandALine: public CommandGALine +{ + public: + CommandALine(Module* c) : CommandGALine(c, "A", 'a') {} +}; + +class ModuleRequireAuth : public Module, public Stats::EventListener +{ + CommandALine cmd1; + CommandGALine cmd2; + ALineFactory fact1; + GALineFactory fact2; + Account::API accountapi; + + public: + ModuleRequireAuth() + : Module(VF_COMMON, "Gives /ALINE and /GALINE, short for auth-lines. Users affected by these will have to use SASL to connect, while any users already connected but not identified to services will be disconnected in a similar manner to G-lines.") + , Stats::EventListener(this) + , cmd1(this) + , cmd2(this) + , accountapi(this) + { + g_accountapi = &accountapi; + } + + void init() override + { + ServerInstance->XLines->RegisterFactory(&fact1); + ServerInstance->XLines->RegisterFactory(&fact2); + } + + ModResult OnStats(Stats::Context& stats) override + { + /*stats A does global lines, stats a local lines.*/ + if (stats.GetSymbol() == 'A') + { + ServerInstance->XLines->InvokeStats("GA", stats); + return MOD_RES_DENY; + } + else if (stats.GetSymbol() == 'a') + { + ServerInstance->XLines->InvokeStats("A", stats); + return MOD_RES_DENY; + } + return MOD_RES_PASSTHRU; + } + + ~ModuleRequireAuth() + { + ServerInstance->XLines->DelAll("A"); + ServerInstance->XLines->DelAll("GA"); + ServerInstance->XLines->UnregisterFactory(&fact1); + ServerInstance->XLines->UnregisterFactory(&fact2); + } + + ModResult OnCheckReady(LocalUser* user) override + { + /*I'm afraid that using the normal xline methods would then result in this line being checked at the wrong time.*/ + if (!isLoggedIn(user)) + { + XLine* locallines = ServerInstance->XLines->MatchesLine("A", user); + XLine* globallines = ServerInstance->XLines->MatchesLine("GA", user); + if (locallines) + { + user->WriteNotice("*** NOTICE -- You need to identify via SASL to use this server (your host is A-lined)."); + ServerInstance->Users.QuitUser(user, "A-lined: "+locallines->reason); + return MOD_RES_DENY; + } + else if (globallines) + { + user->WriteNotice("*** NOTICE -- You need to identify via SASL to use this server (your host is GA-lined)."); + ServerInstance->Users.QuitUser(user, "GA-lined: "+globallines->reason); + return MOD_RES_DENY; + } + } + return MOD_RES_PASSTHRU; + } +}; + +MODULE_INIT(ModuleRequireAuth) diff --git a/4/m_ssl_mbedtls.cpp b/4/m_ssl_mbedtls.cpp index 171211aa..27024ffc 100644 --- a/4/m_ssl_mbedtls.cpp +++ b/4/m_ssl_mbedtls.cpp @@ -29,8 +29,7 @@ /// $PackageInfo: require_system("arch") mbedtls /// $PackageInfo: require_system("darwin") mbedtls -/// $PackageInfo: require_system("debian") libmbedtls-dev -/// $PackageInfo: require_system("ubuntu") libmbedtls-dev +/// $PackageInfo: require_system("debian~") libmbedtls-dev #include "inspircd.h" diff --git a/5/md5.cpp b/5/md5.cpp index ccbfb8cc..980b172a 100644 --- a/5/md5.cpp +++ b/5/md5.cpp @@ -24,6 +24,7 @@ /// $ModDepends: core 5 /// $ModDesc: Allows other modules to generate MD5 hashes. + #include "inspircd.h" #include "modules/hash.h" diff --git a/5/starttls.cpp b/5/starttls.cpp new file mode 100644 index 00000000..4db1e552 --- /dev/null +++ b/5/starttls.cpp @@ -0,0 +1,141 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2019-2023 Sadie Powell + * Copyright (C) 2014 Adam + * Copyright (C) 2013, 2016 Attila Molnar + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/// $ModAuthor: InspIRCd Developers +/// $ModConfig: +/// $ModDepends: core 5 +/// $ModDesc: Provides the IRCv3 tls client capability. + + +#include "inspircd.h" +#include "modules/ssl.h" +#include "modules/cap.h" + +// From IRCv3 tls-3.1 +enum +{ + RPL_STARTTLS = 670, + ERR_STARTTLS = 691 +}; + +class CommandStartTLS final + : public SplitCommand +{ + dynamic_reference_nocheck& ssl; + +public: + CommandStartTLS(Module* mod, dynamic_reference_nocheck& s) + : SplitCommand(mod, "STARTTLS") + , ssl(s) + { + works_before_reg = true; + } + + CmdResult HandleLocal(LocalUser* user, const Params& parameters) override + { + if (!ssl) + { + user->WriteNumeric(ERR_STARTTLS, "STARTTLS is not enabled"); + return CmdResult::FAILURE; + } + + if (user->IsFullyConnected()) + { + user->WriteNumeric(ERR_STARTTLS, "STARTTLS is not permitted once you are fully connected"); + return CmdResult::FAILURE; + } + + if (user->eh.GetIOHook()) + { + user->WriteNumeric(ERR_STARTTLS, "STARTTLS failure"); + return CmdResult::FAILURE; + } + + user->WriteNumeric(RPL_STARTTLS, "STARTTLS successful, go ahead with TLS handshake"); + /* We need to flush the write buffer prior to adding the IOHook, + * otherwise we'll be sending this line inside the TLS session - which + * won't start its handshake until the client gets this line. Currently, + * we assume the write will not block here; this is usually safe, as + * STARTTLS is sent very early on in the connection phase, where the + * user hasn't built up much sendq. Handling a blocked write here would + * be very annoying. + */ + user->eh.DoWrite(); + + ssl->OnAccept(&user->eh, user->client_sa, user->server_sa); + + return CmdResult::SUCCESS; + } +}; + +class TLSCap final + : public Cap::Capability +{ +private: + dynamic_reference_nocheck& sslref; + + bool OnList(LocalUser* user) override + { + return sslref; + } + + bool OnRequest(LocalUser* user, bool adding) override + { + return sslref; + } + +public: + TLSCap(Module* mod, dynamic_reference_nocheck& ssl) + : Cap::Capability(mod, "tls") + , sslref(ssl) + { + } +}; + +class ModuleStartTLS final + : public Module +{ +private: + CommandStartTLS starttls; + TLSCap tls; + dynamic_reference_nocheck ssl; + +public: + ModuleStartTLS() + : Module(VF_VENDOR, "Provides the IRCv3 tls client capability.") + , starttls(this, ssl) + , tls(this, ssl) + , ssl(this, "ssl") + { + } + + void ReadConfig(ConfigStatus& status) override + { + const auto& conf = ServerInstance->Config->ConfValue("starttls"); + + std::string newprovider = conf->getString("provider"); + if (newprovider.empty()) + ssl.SetProvider("ssl"); + else + ssl.SetProvider("ssl/" + newprovider); + } +}; + +MODULE_INIT(ModuleStartTLS) diff --git a/README.md b/README.md index 3705a587..d2ebaea5 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Modules in this repository are not officially supported by the InspIRCd developm See the module author comments in the module files to find the author. -You may be able to find the author or others who use the module in \#inspircd or \#inspircd.dev on irc.chatspike.net. +You may be able to find the author or others who use the module in \#inspircd or \#inspircd.dev on irc.teranova.net. Please make it clear you're asking about a contrib module! diff --git a/modules.lst b/modules.lst index aa45d5a6..d7dce97a 100644 --- a/modules.lst +++ b/modules.lst @@ -264,7 +264,7 @@ module m_xlinetools 3.752 https://raw.githubusercontent.com/inspircd/inspircd-co module m_zombie 3.752 https://raw.githubusercontent.com/inspircd/inspircd-contrib/9705e755cd2f51ee45b6df7dabf127bd6b435966/3/m_zombie.cpp depends core 3 description Provides support for zombifying users who have split because of a network issue. -module m_antiknocker 4.887 https://raw.githubusercontent.com/inspircd/inspircd-contrib/fcf25a6621351cbfa21699b233816043ca997275/4/m_antiknocker.cpp +module m_antiknocker 4.896 https://raw.githubusercontent.com/inspircd/inspircd-contrib/4aa2deafe34b7c77d65b88c9245d114f3a42c781/4/m_antiknocker.cpp description Attempts to block a common IRC spambot. depends core 4 module m_antisnoop 4.847 https://raw.githubusercontent.com/inspircd/inspircd-contrib/7f09d3cfdbeba535984854b1d6be4f632a150877/4/m_antisnoop.cpp @@ -300,13 +300,16 @@ module m_clones 4.808 https://raw.githubusercontent.com/inspircd/inspircd-contri module m_complete 4.810 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e5b22f69a1e5112f17a2e665d9e39691033d98ec/4/m_complete.cpp depends core 4 description Allows clients to automatically complete commands. +module m_conn_banner 4.902 https://raw.githubusercontent.com/inspircd/inspircd-contrib/54b5aa021103111f3b8475ba919ee604cf954c32/4/m_conn_banner.cpp + depends core 4 + description Displays a static text to every connecting user before registration module m_custompenalty 4.810 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e5b22f69a1e5112f17a2e665d9e39691033d98ec/4/m_custompenalty.cpp depends core 4 description Allows the customisation of penalty levels. module m_customtags 4.847 https://raw.githubusercontent.com/inspircd/inspircd-contrib/7f09d3cfdbeba535984854b1d6be4f632a150877/4/m_customtags.cpp depends core 4 description Allows services to add custom tags to messages sent by clients. -module m_cve_2024_39844 4.865 https://raw.githubusercontent.com/inspircd/inspircd-contrib/66a7d02926fb4189478d7fcfdc7f7501c5a5748e/4/m_cve_2024_39844.cpp +module m_cve_2024_39844 4.902 https://raw.githubusercontent.com/inspircd/inspircd-contrib/54b5aa021103111f3b8475ba919ee604cf954c32/4/m_cve_2024_39844.cpp description Prevents clients from sending messages that trigger CVE-2024-39844. depends core 4 module m_defaulttopic 4.810 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e5b22f69a1e5112f17a2e665d9e39691033d98ec/4/m_defaulttopic.cpp @@ -330,13 +333,16 @@ module m_forceusername 4.889 https://raw.githubusercontent.com/inspircd/inspircd module m_geocmd 4.810 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e5b22f69a1e5112f17a2e665d9e39691033d98ec/4/m_geocmd.cpp description Provides the /GEOLOCATE command which performs Geolocation lookups on arbitrary IP addresses. depends core 4 +module m_hideidle 4.902 https://raw.githubusercontent.com/inspircd/inspircd-contrib/54b5aa021103111f3b8475ba919ee604cf954c32/4/m_hideidle.cpp + depends core 4 + description Provides the +a usermode that hides idle and signon time in WHOIS from non-opers module m_hostchange 4.838 https://raw.githubusercontent.com/inspircd/inspircd-contrib/f80fc0433652502ebf0b0bc2574e8ea1f6321609/4/m_hostchange.cpp depends core 4 description Allows the server administrator to define custom rules for applying hostnames to users. module m_ipinfo_io 4.880 https://raw.githubusercontent.com/inspircd/inspircd-contrib/1a7421bf2d28393b9b2aa16b1ceccea9d0da3ba3/4/m_ipinfo_io.cpp description Ip information from Ipinfo.io in /WHOIS (only irc operators), found more information at https://ipinfo.io/developers. depends core 4 -module m_ircv3_extjwt 4.865 https://raw.githubusercontent.com/inspircd/inspircd-contrib/66a7d02926fb4189478d7fcfdc7f7501c5a5748e/4/m_ircv3_extjwt.cpp +module m_ircv3_extjwt 4.905 https://raw.githubusercontent.com/inspircd/inspircd-contrib/a89263cd0d09f53d93772493cb33570e55e043a0/4/m_ircv3_extjwt.cpp depends core 4 description Provides the DRAFT extjwt IRCv3 extension. module m_lockserv 4.799 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e546323c7c796b4c94ca80bdd9a5255211a46ab1/4/m_lockserv.cpp @@ -366,22 +372,25 @@ module m_profileLink 4.867 https://raw.githubusercontent.com/inspircd/inspircd-c module m_protoctl 4.793 https://raw.githubusercontent.com/inspircd/inspircd-contrib/c9161ee47d5110bbbd7b056fa9b0d9a0e7ad18bf/4/m_protoctl.cpp depends core 4 description Provides compatibility with the legacy PROTOCTL system. -module m_qrcode 4.838 https://raw.githubusercontent.com/inspircd/inspircd-contrib/f80fc0433652502ebf0b0bc2574e8ea1f6321609/4/m_qrcode.cpp +module m_qrcode 4.904 https://raw.githubusercontent.com/inspircd/inspircd-contrib/028e18b70364d6136d9923e3582f3a9b09ca6f0b/4/m_qrcode.cpp description Provides support for QR code generation via the /QRCODE command. depends core 4 module m_randomidxlines 4.869 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e454c12513ba770f73449ab28b75d5e05e62c5c1/4/m_randomidxlines.cpp description Enhances /zline, /gline, /kline, /kill and similar commands by adding a random ID to the end for better log identification. depends core 4 -module m_regex_pcre 4.855 https://raw.githubusercontent.com/inspircd/inspircd-contrib/b1b82736e851b6530cfa281ea48f968139859638/4/m_regex_pcre.cpp +module m_regex_pcre 4.904 https://raw.githubusercontent.com/inspircd/inspircd-contrib/028e18b70364d6136d9923e3582f3a9b09ca6f0b/4/m_regex_pcre.cpp depends core 4 description Provides the pcre regular expression engine which uses the PCRE library. -module m_regex_tre 4.806 https://raw.githubusercontent.com/inspircd/inspircd-contrib/c76c44ac28de44d49c1883b35943f5a3408eda74/4/m_regex_tre.cpp +module m_regex_tre 4.904 https://raw.githubusercontent.com/inspircd/inspircd-contrib/028e18b70364d6136d9923e3582f3a9b09ca6f0b/4/m_regex_tre.cpp depends core 4 description Provides the tre regular expression engine which uses the TRE library. +module m_require_auth 4.901 https://raw.githubusercontent.com/inspircd/inspircd-contrib/8c7730ee7338fca1f36172ea59d8b67c695d6e4e/4/m_require_auth.cpp + description Gives /ALINE and /GALINE, short for auth-lines. Users affected by these will have to use SASL to connect, while any users already connected but not identified to services will be disconnected in a similar manner to G-lines. + depends core 4 module m_solvemsg 4.847 https://raw.githubusercontent.com/inspircd/inspircd-contrib/7f09d3cfdbeba535984854b1d6be4f632a150877/4/m_solvemsg.cpp depends core 4 description Requires users to solve a basic maths problem before messaging others. -module m_ssl_mbedtls 4.842 https://raw.githubusercontent.com/inspircd/inspircd-contrib/482c3660c142faf9f97edd012f6f6fcc8a4206c6/4/m_ssl_mbedtls.cpp +module m_ssl_mbedtls 4.904 https://raw.githubusercontent.com/inspircd/inspircd-contrib/028e18b70364d6136d9923e3582f3a9b09ca6f0b/4/m_ssl_mbedtls.cpp depends core 4 description Allows TLS encrypted connections using the mbedTLS library. module m_stats_unlinked 4.810 https://raw.githubusercontent.com/inspircd/inspircd-contrib/e5b22f69a1e5112f17a2e665d9e39691033d98ec/4/m_stats_unlinked.cpp @@ -399,6 +408,9 @@ module m_userip 4.812 https://raw.githubusercontent.com/inspircd/inspircd-contri module cloak_md5 5.873 https://raw.githubusercontent.com/inspircd/inspircd-contrib/86b9049717107211f30f34b4e3b1e55dc85147ba/5/cloak_md5.cpp depends core 5 description Adds the half and full cloaking methods for use with the cloak module. -module md5 5.873 https://raw.githubusercontent.com/inspircd/inspircd-contrib/86b9049717107211f30f34b4e3b1e55dc85147ba/5/md5.cpp +module md5 5.907 https://raw.githubusercontent.com/inspircd/inspircd-contrib/56b8583169dc888cec54ff43d824e3b3711234d3/5/md5.cpp depends core 5 description Allows other modules to generate MD5 hashes. +module starttls 5.907 https://raw.githubusercontent.com/inspircd/inspircd-contrib/56b8583169dc888cec54ff43d824e3b3711234d3/5/starttls.cpp + depends core 5 + description Provides the IRCv3 tls client capability.