aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-02-28 19:16:40 +0000
committerGravatar Sadie Powell2021-02-28 19:16:40 +0000
commitc22c7e5a99c8f913c12cad13977d7c56fa7ee8e4 (patch)
treeb044fa7ab25ac5cf769e5eb6dfa4dda85030794d /src
parentMerge branch 'insp3' into master. (diff)
parentFix running configure on systems with old versions of Perl. (diff)
Merge branch 'insp3' into master.
Diffstat (limited to 'src')
-rw-r--r--src/configreader.cpp2
-rw-r--r--src/coremods/core_dns.cpp2
-rw-r--r--src/coremods/core_info/cmd_admin.cpp2
-rw-r--r--src/coremods/core_info/cmd_info.cpp17
-rw-r--r--src/coremods/core_info/cmd_servlist.cpp4
-rw-r--r--src/coremods/core_info/cmd_time.cpp2
-rw-r--r--src/coremods/core_message.cpp28
-rw-r--r--src/coremods/core_oper/umode_s.cpp2
-rw-r--r--src/coremods/core_reloadmodule.cpp2
-rw-r--r--src/coremods/core_stub.cpp2
-rw-r--r--src/coremods/core_whois.cpp16
-rw-r--r--src/cull_list.cpp2
-rw-r--r--src/inspircd.cpp4
-rw-r--r--src/mode.cpp11
-rw-r--r--src/modules/extra/m_argon2.cpp1
-rw-r--r--src/modules/extra/m_geo_maxmind.cpp8
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp4
-rw-r--r--src/modules/extra/m_ssl_mbedtls.cpp4
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp4
-rw-r--r--src/modules/m_alias.cpp9
-rw-r--r--src/modules/m_cgiirc.cpp149
-rw-r--r--src/modules/m_chanhistory.cpp26
-rw-r--r--src/modules/m_check.cpp12
-rw-r--r--src/modules/m_connectban.cpp2
-rw-r--r--src/modules/m_connflood.cpp14
-rw-r--r--src/modules/m_dnsbl.cpp2
-rw-r--r--src/modules/m_globalload.cpp4
-rw-r--r--src/modules/m_httpd_config.cpp3
-rw-r--r--src/modules/m_httpd_stats.cpp2
-rw-r--r--src/modules/m_ircv3_batch.cpp2
-rw-r--r--src/modules/m_ircv3_ctctags.cpp23
-rw-r--r--src/modules/m_ldapoper.cpp3
-rw-r--r--src/modules/m_mlock.cpp2
-rw-r--r--src/modules/m_namesx.cpp49
-rw-r--r--src/modules/m_override.cpp1
-rw-r--r--src/modules/m_pbkdf2.cpp2
-rw-r--r--src/modules/m_permchannels.cpp2
-rw-r--r--src/modules/m_repeat.cpp1
-rw-r--r--src/modules/m_sanick.cpp2
-rw-r--r--src/modules/m_sha1.cpp2
-rw-r--r--src/modules/m_shun.cpp2
-rw-r--r--src/modules/m_spanningtree/capab.cpp2
-rw-r--r--src/modules/m_spanningtree/misccommands.cpp2
-rw-r--r--src/modules/m_spanningtree/override_map.cpp1
-rw-r--r--src/modules/m_spanningtree/svsnick.cpp2
-rw-r--r--src/modules/m_sslinfo.cpp3
-rw-r--r--src/socket.cpp2
-rw-r--r--src/socketengines/socketengine_epoll.cpp2
-rw-r--r--src/usermanager.cpp2
-rw-r--r--src/users.cpp2
50 files changed, 293 insertions, 156 deletions
diff --git a/src/configreader.cpp b/src/configreader.cpp
index a72257609..ac3a2e811 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2013-2016 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013-2014, 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013-2014, 2016-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 Justin Crawford <Justasic@Gmail.com>
diff --git a/src/coremods/core_dns.cpp b/src/coremods/core_dns.cpp
index b42c0aa9e..8ac41866e 100644
--- a/src/coremods/core_dns.cpp
+++ b/src/coremods/core_dns.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2019 Robby <robby@chatbelgie.be>
- * Copyright (C) 2015, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2015, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013, 2015-2016 Adam <Adam@anope.org>
*
diff --git a/src/coremods/core_info/cmd_admin.cpp b/src/coremods/core_info/cmd_admin.cpp
index cabca3b35..372c1805a 100644
--- a/src/coremods/core_info/cmd_admin.cpp
+++ b/src/coremods/core_info/cmd_admin.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/coremods/core_info/cmd_info.cpp b/src/coremods/core_info/cmd_info.cpp
index 48f307f07..28ca92e0d 100644
--- a/src/coremods/core_info/cmd_info.cpp
+++ b/src/coremods/core_info/cmd_info.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2015 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2013-2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
@@ -57,7 +57,7 @@ static const char* const lines[] = {
" Robin Burchell, w00t, <w00t@inspircd.org>",
" ",
"\002Active Contributors\002:",
- " Adam linuxdaemon Robby Sheogorath",
+ " Adam Robby",
" ",
"\002Former Contributors\002:",
" Adremelech Ankit AnMaster Bricker",
@@ -65,16 +65,17 @@ static const char* const lines[] = {
" Dan djGrrr dmb eggy",
" GreenReaper HiroP jackmcbarn jamie",
" Jason jilles John2 kaniini",
- " LeaChim MacGyver Majic Namegduf",
- " owine Phoenix pippijn praetorian",
- " Quension satmd Shawn Shutter",
- " skenmy Skip Stskeeps Taros",
- " ThaPrince Thunderhacker typobox43 Zaba",
+ " LeaChim linuxdaemon MacGyver majic",
+ " Namegduf owine Phoenix pippijn",
+ " praetorian Quension satmd Shawn",
+ " Sheogorath Shutter skenmy Skip",
+ " Stskeeps Taros ThaPrince Thunderhacker",
+ " typobox43 Zaba",
" ",
"\002Thanks To\002:",
" Asmo Brik fraggeln prawnsalad",
" ",
- " Best experienced with: \002An IRC client\002",
+ " Best experienced with \002an IRC client\002",
NULL
};
diff --git a/src/coremods/core_info/cmd_servlist.cpp b/src/coremods/core_info/cmd_servlist.cpp
index 753df3b49..682aae171 100644
--- a/src/coremods/core_info/cmd_servlist.cpp
+++ b/src/coremods/core_info/cmd_servlist.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2020-2021 Sadie Powell <sadie@witchery.services>
*
* 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
@@ -44,7 +44,7 @@ CmdResult CommandServList::HandleLocal(LocalUser* user, const Params& parameters
if (serviceuser->IsModeSet(invisiblemode) || !InspIRCd::Match(serviceuser->nick, mask))
continue;
- if (has_type && (!user->IsOper() || !InspIRCd::Match(user->oper->name, parameters[2 ])))
+ if (has_type && (!serviceuser->IsOper() || !InspIRCd::Match(serviceuser->oper->name, parameters[2])))
continue;
Numeric::Numeric numeric(RPL_SERVLIST);
diff --git a/src/coremods/core_info/cmd_time.cpp b/src/coremods/core_info/cmd_time.cpp
index d7d44e8fa..941151781 100644
--- a/src/coremods/core_info/cmd_time.cpp
+++ b/src/coremods/core_info/cmd_time.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/coremods/core_message.cpp b/src/coremods/core_message.cpp
index 886604a4d..7b7a43da1 100644
--- a/src/coremods/core_message.cpp
+++ b/src/coremods/core_message.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2017-2018 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
@@ -24,11 +24,6 @@
#include "inspircd.h"
-enum
-{
- // From RFC 2812.
- ERR_NOSUCHSERVICE = 408
-};
class MessageDetailsImpl : public MessageDetails
{
@@ -303,15 +298,26 @@ class CommandMessage : public Command
if (parameters[0][0] == '$')
return HandleServerTarget(user, parameters);
- // If the message begins with a status character then look it up.
+ // If the message begins with one or more status characters then look them up.
const char* target = parameters[0].c_str();
- PrefixMode* pmh = ServerInstance->Modes.FindPrefix(target[0]);
- if (pmh)
- target++;
+ PrefixMode* targetpfx = NULL;
+ for (PrefixMode* pfx; (pfx = ServerInstance->Modes.FindPrefix(target[0])); ++target)
+ {
+ // We want the lowest ranked prefix specified.
+ if (!targetpfx || pfx->GetPrefixRank() < targetpfx->GetPrefixRank())
+ targetpfx = pfx;
+ }
+
+ if (!target[0])
+ {
+ // The target consisted solely of prefix modes.
+ user->WriteNumeric(ERR_NORECIPIENT, "No recipient given");
+ return CmdResult::FAILURE;
+ }
// The target is a channel name.
if (*target == '#')
- return HandleChannelTarget(user, parameters, target, pmh);
+ return HandleChannelTarget(user, parameters, target, targetpfx);
// The target is a nickname.
return HandleUserTarget(user, parameters);
diff --git a/src/coremods/core_oper/umode_s.cpp b/src/coremods/core_oper/umode_s.cpp
index 16c7e23b8..1ac8993f0 100644
--- a/src/coremods/core_oper/umode_s.cpp
+++ b/src/coremods/core_oper/umode_s.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2017, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2017, 2020-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/coremods/core_reloadmodule.cpp b/src/coremods/core_reloadmodule.cpp
index d67969510..366ac8a4b 100644
--- a/src/coremods/core_reloadmodule.cpp
+++ b/src/coremods/core_reloadmodule.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2017-2019, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014-2016, 2018 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/coremods/core_stub.cpp b/src/coremods/core_stub.cpp
index 5b55b78cc..1e622107e 100644
--- a/src/coremods/core_stub.cpp
+++ b/src/coremods/core_stub.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2019 Robby <robby@chatbelgie.be>
- * Copyright (C) 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2017-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014-2016 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/coremods/core_whois.cpp b/src/coremods/core_whois.cpp
index 816f42f87..a6ca4a2bc 100644
--- a/src/coremods/core_whois.cpp
+++ b/src/coremods/core_whois.cpp
@@ -30,22 +30,6 @@
#include "inspircd.h"
#include "modules/whois.h"
-enum
-{
- // From RFC 1459.
- RPL_WHOISUSER = 311,
- RPL_WHOISOPERATOR = 313,
- RPL_WHOISIDLE = 317,
- RPL_WHOISCHANNELS = 319,
-
- // From UnrealIRCd.
- RPL_WHOISHOST = 378,
- RPL_WHOISMODES = 379,
-
- // InspIRCd-specific.
- RPL_CHANNELSMSG = 651
-};
-
enum SplitWhoisState
{
// Don't split private/secret channels into a separate RPL_WHOISCHANNELS numeric.
diff --git a/src/cull_list.cpp b/src/cull_list.cpp
index 7eae8b0bc..0f9c24f15 100644
--- a/src/cull_list.cpp
+++ b/src/cull_list.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2015 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2011 jackmcbarn <jackmcbarn@inspircd.org>
* Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index fda31feb7..92d5ba7bf 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -3,12 +3,12 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2018 Chris Novakovic <chrisnovakovic@users.noreply.github.com>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2018-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Adam <Adam@anope.org>
* Copyright (C) 2012-2014, 2016, 2018 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2012 William Pitcock <nenolod@dereferenced.org>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
+ * Copyright (C) 2012 Ariadne Conill <ariadne@dereferenced.org>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
* Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
diff --git a/src/mode.cpp b/src/mode.cpp
index 64f844e28..ddcddda6a 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -96,6 +96,14 @@ void ModeHandler::OnParameterMissing(User* user, User* dest, Channel* channel)
user->WriteNumeric(Numerics::InvalidModeParameter(dest, this, "*", message));
}
+void ModeHandler::OnParameterInvalid(User* user, Channel* targetchannel, User* targetuser, const std::string& parameter)
+{
+ if (targetchannel)
+ user->WriteNumeric(Numerics::InvalidModeParameter(targetchannel, this, "*"));
+ else
+ user->WriteNumeric(Numerics::InvalidModeParameter(targetuser, this, "*"));
+}
+
bool ModeHandler::ResolveModeConflict(std::string& theirs, const std::string& ours, Channel*)
{
return (theirs < ours);
@@ -390,7 +398,10 @@ static bool IsModeParamValid(User* user, Channel* targetchannel, User* targetuse
// The parameter cannot begin with a ':' character or contain a space
if ((item.param[0] == ':') || (item.param.find(' ') != std::string::npos))
+ {
+ item.mh->OnParameterInvalid(user, targetchannel, targetuser, item.param);
return false;
+ }
return true;
}
diff --git a/src/modules/extra/m_argon2.cpp b/src/modules/extra/m_argon2.cpp
index d3f09b2d5..198944ddf 100644
--- a/src/modules/extra/m_argon2.cpp
+++ b/src/modules/extra/m_argon2.cpp
@@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2020 Elizabeth Myers <elizabeth@interlinked.me>
* Copyright (C) 2020 Daniel Vassdal <shutter@canternet.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/modules/extra/m_geo_maxmind.cpp b/src/modules/extra/m_geo_maxmind.cpp
index b178d2c86..78a686073 100644
--- a/src/modules/extra/m_geo_maxmind.cpp
+++ b/src/modules/extra/m_geo_maxmind.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2019-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2019-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
@@ -43,6 +43,12 @@ class GeolocationExtItem : public ExtensionItem
{
}
+ std::string ToHuman(const Extensible* container, void* item) const override
+ {
+ Geolocation::Location* location = static_cast<Geolocation::Location*>(item);
+ return location->GetName() + " [" + location->GetCode() + "]";
+ }
+
void Delete(Extensible* container, void* item) override
{
Geolocation::Location* old = static_cast<Geolocation::Location*>(item);
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index 2190def6c..0ad6e3b99 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013-2014, 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013-2014, 2016-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012-2017 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012-2013, 2016 Adam <Adam@anope.org>
@@ -1191,7 +1191,7 @@ class ModuleSSLGnuTLS : public Module
try
{
ReadProfiles();
- ServerInstance->SNO.WriteToSnoMask('a', "TLS (SSL) module GnuTLS rehashed.");
+ ServerInstance->SNO.WriteToSnoMask('a', "GnuTLS TLS (SSL) profiles have been reloaded.");
}
catch (ModuleException& ex)
{
diff --git a/src/modules/extra/m_ssl_mbedtls.cpp b/src/modules/extra/m_ssl_mbedtls.cpp
index 4a95329fa..89a1d24a7 100644
--- a/src/modules/extra/m_ssl_mbedtls.cpp
+++ b/src/modules/extra/m_ssl_mbedtls.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
- * Copyright (C) 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2016-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2016-2017 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
@@ -927,7 +927,7 @@ class ModuleSSLmbedTLS : public Module
try
{
ReadProfiles();
- ServerInstance->SNO.WriteToSnoMask('a', "TLS (SSL) module mbedTLS rehashed.");
+ ServerInstance->SNO.WriteToSnoMask('a', "mbedTLS TLS (SSL) profiles have been reloaded.");
}
catch (ModuleException& ex)
{
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index a8c09eec3..9ebcb56eb 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -6,7 +6,7 @@
* Copyright (C) 2017 Wade Cline <wadecline@hotmail.com>
* Copyright (C) 2014, 2016 Adam <Adam@anope.org>
* Copyright (C) 2014 Julien Vehent <julien@linuxwall.info>
- * Copyright (C) 2013-2014, 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013-2014, 2016-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2017 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
@@ -981,7 +981,7 @@ class ModuleSSLOpenSSL : public Module
try
{
ReadProfiles();
- ServerInstance->SNO.WriteToSnoMask('a', "TLS (SSL) module OpenSSL rehashed.");
+ ServerInstance->SNO.WriteToSnoMask('a', "OpenSSL TLS (SSL) profiles have been reloaded.");
}
catch (ModuleException& ex)
{
diff --git a/src/modules/m_alias.cpp b/src/modules/m_alias.cpp
index f4d4ad680..12a6ba833 100644
--- a/src/modules/m_alias.cpp
+++ b/src/modules/m_alias.cpp
@@ -2,8 +2,8 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2018-2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013-2016, 2018 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013, 2015-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013-2015, 2018 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2013, 2015-2019, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2009 Matt Smith <dz@inspircd.org>
@@ -279,17 +279,18 @@ class ModuleAlias : public Module
if (!a.RequiredNick.empty())
{
+ int numeric = a.ServiceOnly ? ERR_NOSUCHSERVICE : ERR_NOSUCHNICK;
User* u = ServerInstance->Users.FindNick(a.RequiredNick);
if (!u)
{
- user->WriteNumeric(ERR_NOSUCHNICK, a.RequiredNick, "is currently unavailable. Please try again later.");
+ user->WriteNumeric(numeric, a.RequiredNick, "is currently unavailable. Please try again later.");
return 1;
}
if ((a.ServiceOnly) && (!u->server->IsService()))
{
ServerInstance->SNO.WriteToSnoMask('a', "NOTICE -- Service "+a.RequiredNick+" required by alias "+a.AliasedCommand+" is not on a U-lined server, possibly underhanded antics detected!");
- user->WriteNumeric(ERR_NOSUCHNICK, a.RequiredNick, "is not a network service! Please inform a server operator as soon as possible.");
+ user->WriteNumeric(numeric, a.RequiredNick, "is not a network service! Please inform a server operator as soon as possible.");
return 1;
}
}
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index a8f126b84..3b1013691 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
* Copyright (C) 2014 md_5 <git@md-5.net>
* Copyright (C) 2014 Googolplexed <googol@googolplexed.net>
- * Copyright (C) 2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2018, 2020-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Adam <Adam@anope.org>
* Copyright (C) 2012-2013, 2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
@@ -124,6 +124,84 @@ class WebIRCHost
}
};
+class CommandHexIP : public SplitCommand
+{
+ public:
+ CommandHexIP(Module* Creator)
+ : SplitCommand(Creator, "HEXIP", 1)
+ {
+ allow_empty_last_param = false;
+ Penalty = 2;
+ syntax = { "<hex-ip|raw-ip>" };
+ }
+
+ CmdResult HandleLocal(LocalUser* user, const Params& parameters) override
+ {
+ irc::sockets::sockaddrs sa;
+ if (irc::sockets::aptosa(parameters[0], 0, sa))
+ {
+ if (sa.family() != AF_INET)
+ {
+ user->WriteNotice("*** HEXIP: You can only hex encode an IPv4 address!");
+ return CmdResult::FAILURE;
+ }
+
+ uint32_t addr = sa.in4.sin_addr.s_addr;
+ user->WriteNotice(InspIRCd::Format("*** HEXIP: %s encodes to %02x%02x%02x%02x.",
+ sa.addr().c_str(), (addr & 0xFF), ((addr >> 8) & 0xFF), ((addr >> 16) & 0xFF),
+ ((addr >> 24) & 0xFF)));
+ return CmdResult::SUCCESS;
+ }
+
+ if (ParseIP(parameters[0], sa))
+ {
+ user->WriteNotice(InspIRCd::Format("*** HEXIP: %s decodes to %s.",
+ parameters[0].c_str(), sa.addr().c_str()));
+ return CmdResult::SUCCESS;
+ }
+
+ user->WriteNotice(InspIRCd::Format("*** HEXIP: %s is not a valid raw or hex encoded IPv4 address.",
+ parameters[0].c_str()));
+ return CmdResult::FAILURE;
+ }
+
+ static bool ParseIP(const std::string& in, irc::sockets::sockaddrs& out)
+ {
+ const char* ident = NULL;
+ if (in.length() == 8)
+ {
+ // The ident is an IPv4 address encoded in hexadecimal with two characters
+ // per address segment.
+ ident = in.c_str();
+ }
+ else if (in.length() == 9 && in[0] == '~')
+ {
+ // The same as above but m_ident got to this user before we did. Strip the
+ // ident prefix and continue as normal.
+ ident = in.c_str() + 1;
+ }
+ else
+ {
+ // The user either does not have an IPv4 in their ident or the gateway server
+ // is also running an identd. In the latter case there isn't really a lot we
+ // can do so we just assume that the client in question is not connecting via
+ // an ident gateway.
+ return false;
+ }
+
+ // Try to convert the IP address to a string. If this fails then the user
+ // does not have an IPv4 address in their ident.
+ errno = 0;
+ unsigned long address = strtoul(ident, NULL, 16);
+ if (errno)
+ return false;
+
+ out.in4.sin_family = AF_INET;
+ out.in4.sin_addr.s_addr = htonl(address);
+ return true;
+ }
+};
+
class CommandWebIRC : public SplitCommand
{
public:
@@ -173,8 +251,9 @@ class CommandWebIRC : public SplitCommand
realhost.set(user, user->GetRealHost());
realip.set(user, user->GetIPString());
- WriteLog("Connecting user %s is using a WebIRC gateway; changing their IP from %s to %s.",
- user->uuid.c_str(), user->GetIPString().c_str(), parameters[3].c_str());
+ WriteLog("Connecting user %s is using the %s WebIRC gateway; changing their IP from %s to %s.",
+ user->uuid.c_str(), parameters[1].c_str(),
+ user->GetIPString().c_str(), parameters[3].c_str());
// If we have custom flags then deal with them.
WebIRC::FlagMap flags;
@@ -235,51 +314,17 @@ class ModuleCgiIRC
, public Whois::EventListener
{
private:
- CommandWebIRC cmd;
+ CommandHexIP cmdhexip;
+ CommandWebIRC cmdwebirc;
std::vector<IdentHost> hosts;
- static bool ParseIdent(LocalUser* user, irc::sockets::sockaddrs& out)
- {
- const char* ident = NULL;
- if (user->ident.length() == 8)
- {
- // The ident is an IPv4 address encoded in hexadecimal with two characters
- // per address segment.
- ident = user->ident.c_str();
- }
- else if (user->ident.length() == 9 && user->ident[0] == '~')
- {
- // The same as above but m_ident got to this user before we did. Strip the
- // ident prefix and continue as normal.
- ident = user->ident.c_str() + 1;
- }
- else
- {
- // The user either does not have an IPv4 in their ident or the gateway server
- // is also running an identd. In the latter case there isn't really a lot we
- // can do so we just assume that the client in question is not connecting via
- // an ident gateway.
- return false;
- }
-
- // Try to convert the IP address to a string. If this fails then the user
- // does not have an IPv4 address in their ident.
- errno = 0;
- unsigned long address = strtoul(ident, NULL, 16);
- if (errno)
- return false;
-
- out.in4.sin_family = AF_INET;
- out.in4.sin_addr.s_addr = htonl(address);
- return true;
- }
-
public:
ModuleCgiIRC()
: Module(VF_VENDOR, "Adds the ability for IRC gateways to forward the real IP address of users connecting through them.")
, WebIRC::EventListener(this)
, Whois::EventListener(this)
- , cmd(this)
+ , cmdhexip(this)
+ , cmdwebirc(this)
{
}
@@ -339,10 +384,10 @@ class ModuleCgiIRC
// The host configuration was valid so we can apply it.
hosts.swap(identhosts);
- cmd.hosts.swap(webirchosts);
+ cmdwebirc.hosts.swap(webirchosts);
// Do we send an oper notice when a m_cgiirc client has their IP changed?
- cmd.notify = ServerInstance->Config->ConfValue("cgiirc")->getBool("opernotice", true);
+ cmdwebirc.notify = ServerInstance->Config->ConfValue("cgiirc")->getBool("opernotice", true);
}
ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
@@ -354,7 +399,7 @@ class ModuleCgiIRC
// If the user is not connecting via a WebIRC gateway then they
// cannot match this connect class.
- const std::string* gateway = cmd.gateway.get(user);
+ const std::string* gateway = cmdwebirc.gateway.get(user);
if (!gateway)
{
ServerInstance->Logs.Log("CONNECTCLASS", LOG_DEBUG, "The %s connect class is not suitable as it requires a connection via a WebIRC gateway",
@@ -377,7 +422,7 @@ class ModuleCgiIRC
ModResult OnUserRegister(LocalUser* user) override
{
// There is no need to check for gateways if one is already being used.
- if (cmd.realhost.get(user))
+ if (cmdwebirc.realhost.get(user))
return MOD_RES_PASSTHRU;
for (std::vector<IdentHost>::const_iterator iter = hosts.begin(); iter != hosts.end(); ++iter)
@@ -389,15 +434,15 @@ class ModuleCgiIRC
// We have matched an <cgihost> block! Try to parse the encoded IPv4 address
// out of the ident.
irc::sockets::sockaddrs address(user->client_sa);
- if (!ParseIdent(user, address))
+ if (!CommandHexIP::ParseIP(user->ident, address))
return MOD_RES_PASSTHRU;
// Store the hostname and IP of the gateway for later use.
- cmd.realhost.set(user, user->GetRealHost());
- cmd.realip.set(user, user->GetIPString());
+ cmdwebirc.realhost.set(user, user->GetRealHost());
+ cmdwebirc.realip.set(user, user->GetIPString());
const std::string& newident = iter->GetIdent();
- cmd.WriteLog("Connecting user %s is using an ident gateway; changing their IP from %s to %s and their ident from %s to %s.",
+ cmdwebirc.WriteLog("Connecting user %s is using an ident gateway; changing their IP from %s to %s and their ident from %s to %s.",
user->uuid.c_str(), user->GetIPString().c_str(), address.addr().c_str(), user->ident.c_str(), newident.c_str());
user->ChangeIdent(newident);
@@ -473,12 +518,12 @@ class ModuleCgiIRC
return;
// If these fields are not set then the client is not using a gateway.
- const std::string* realhost = cmd.realhost.get(whois.GetTarget());
- const std::string* realip = cmd.realip.get(whois.GetTarget());
+ const std::string* realhost = cmdwebirc.realhost.get(whois.GetTarget());
+ const std::string* realip = cmdwebirc.realip.get(whois.GetTarget());
if (!realhost || !realip)
return;
- const std::string* gateway = cmd.gateway.get(whois.GetTarget());
+ const std::string* gateway = cmdwebirc.gateway.get(whois.GetTarget());
if (gateway)
whois.SendLine(RPL_WHOISGATEWAY, *realhost, *realip, "is connected via the " + *gateway + " WebIRC gateway");
else
diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp
index e7b43ab05..62b275f36 100644
--- a/src/modules/m_chanhistory.cpp
+++ b/src/modules/m_chanhistory.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012-2015, 2018 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
@@ -211,18 +211,20 @@ class ModuleChanHistory
void OnUserPostMessage(User* user, const MessageTarget& target, const MessageDetails& details) override
{
+ if (target.type != MessageTarget::TYPE_CHANNEL || target.status)
+ return;
+
std::string ctcpname;
- if ((target.type == MessageTarget::TYPE_CHANNEL) && (target.status == 0) && (!details.IsCTCP(ctcpname) || irc::equals(ctcpname, "ACTION")))
- {
- Channel* c = target.Get<Channel>();
- HistoryList* list = historymode.ext.get(c);
- if (list)
- {
- list->lines.push_back(HistoryItem(user, details));
- if (list->lines.size() > list->maxlen)
- list->lines.pop_front();
- }
- }
+ if (details.IsCTCP(ctcpname) && !irc::equals(ctcpname, "ACTION"))
+ return;
+
+ HistoryList* list = historymode.ext.get(target.Get<Channel>());
+ if (!list)
+ return;
+
+ list->lines.push_back(HistoryItem(user, details));
+ if (list->lines.size() > list->maxlen)
+ list->lines.pop_front();
}
void OnPostJoin(Membership* memb) override
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp
index 5897caa0f..d585c0d17 100644
--- a/src/modules/m_check.cpp
+++ b/src/modules/m_check.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2013-2016 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2010 Craig Edwards <brain@inspircd.org>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
@@ -146,6 +146,15 @@ class CommandCheck : public Command
return ret;
}
+ static std::string GetAllowedOperOnlySnomasks(LocalUser* user)
+ {
+ std::string ret;
+ for (unsigned char sno = 'A'; sno <= 'z'; ++sno)
+ if (ServerInstance->SNO.IsSnomaskUsable(sno) && user->HasSnomaskPermission(sno))
+ ret.push_back(sno);
+ return ret;
+ }
+
public:
CommandCheck(Module* parent)
: Command(parent,"CHECK", 1)
@@ -208,6 +217,7 @@ class CommandCheck : public Command
{
context.Write("chanmodeperms", GetAllowedOperOnlyModes(loctarg, MODETYPE_CHANNEL));
context.Write("usermodeperms", GetAllowedOperOnlyModes(loctarg, MODETYPE_USER));
+ context.Write("snomaskperms", GetAllowedOperOnlySnomasks(loctarg));
context.Write("commandperms", targuser->oper->AllowedOperCommands.ToString());
context.Write("permissions", targuser->oper->AllowedPrivs.ToString());
}
diff --git a/src/modules/m_connectban.cpp b/src/modules/m_connectban.cpp
index bba54811a..95c077eef 100644
--- a/src/modules/m_connectban.cpp
+++ b/src/modules/m_connectban.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2014 Googolplexed <googol@googolplexed.net>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2014 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/modules/m_connflood.cpp b/src/modules/m_connflood.cpp
index 3e730ac69..23aa178ea 100644
--- a/src/modules/m_connflood.cpp
+++ b/src/modules/m_connflood.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2013, 2018-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2018-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2013 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
@@ -37,6 +37,16 @@ class ModuleConnFlood : public Module
time_t first;
std::string quitmsg;
+ static bool IsExempt(LocalUser* user)
+ {
+ // E-lined and already banned users shouldn't be hit.
+ if (user->exempt || user->quitting)
+ return true;
+
+ // Users in an exempt class shouldn't be hit.
+ return user->GetClass() && !user->GetClass()->config->getBool("useconnflood", true);
+ }
+
public:
ModuleConnFlood()
: Module(VF_VENDOR, "Throttles excessive connections to the server.")
@@ -61,7 +71,7 @@ class ModuleConnFlood : public Module
ModResult OnUserRegister(LocalUser* user) override
{
- if (user->exempt)
+ if (IsExempt(user))
return MOD_RES_PASSTHRU;
time_t next = ServerInstance->Time();
diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp
index b58b8bdc2..545a315cf 100644
--- a/src/modules/m_dnsbl.cpp
+++ b/src/modules/m_dnsbl.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2018-2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2018-2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013, 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015-2016 Adam <Adam@anope.org>
* Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2018 Robby <robby@chatbelgie.be>
diff --git a/src/modules/m_globalload.cpp b/src/modules/m_globalload.cpp
index 03b83654d..fa4d3eded 100644
--- a/src/modules/m_globalload.cpp
+++ b/src/modules/m_globalload.cpp
@@ -1,13 +1,13 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2018, 2020-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2012, 2014-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2009 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007-2008, 2010 Craig Edwards <brain@inspircd.org>
* Copyright (C) 2007-2008 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2007, 2009 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 John Brooks <special@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/modules/m_httpd_config.cpp b/src/modules/m_httpd_config.cpp
index b3a779f5b..a42fec8ea 100644
--- a/src/modules/m_httpd_config.cpp
+++ b/src/modules/m_httpd_config.cpp
@@ -1,8 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013, 2017-2018 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp
index fe7377c2c..c18c8c960 100644
--- a/src/modules/m_httpd_stats.cpp
+++ b/src/modules/m_httpd_stats.cpp
@@ -5,7 +5,7 @@
* Copyright (C) 2018 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2016 Johanna A <johanna-a@users.noreply.github.com>
* Copyright (C) 2013-2016 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013, 2017, 2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017, 2019-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/modules/m_ircv3_batch.cpp b/src/modules/m_ircv3_batch.cpp
index 64cfe5e88..01d3384e9 100644
--- a/src/modules/m_ircv3_batch.cpp
+++ b/src/modules/m_ircv3_batch.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2018 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/modules/m_ircv3_ctctags.cpp b/src/modules/m_ircv3_ctctags.cpp
index 72897ce05..6f452431d 100644
--- a/src/modules/m_ircv3_ctctags.cpp
+++ b/src/modules/m_ircv3_ctctags.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2021 Sadie Powell <sadie@witchery.services>
*
* 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
@@ -234,15 +234,26 @@ class CommandTagMsg : public Command
if (parameters[0][0] == '$')
return HandleServerTarget(user, parameters);
- // If the message begins with a status character then look it up.
+ // If the message begins with one or more status characters then look them up.
const char* target = parameters[0].c_str();
- PrefixMode* pmh = ServerInstance->Modes.FindPrefix(target[0]);
- if (pmh)
- target++;
+ PrefixMode* targetpfx = NULL;
+ for (PrefixMode* pfx; (pfx = ServerInstance->Modes.FindPrefix(target[0])); ++target)
+ {
+ // We want the lowest ranked prefix specified.
+ if (!targetpfx || pfx->GetPrefixRank() < targetpfx->GetPrefixRank())
+ targetpfx = pfx;
+ }
+
+ if (!target[0])
+ {
+ // The target consisted solely of prefix modes.
+ user->WriteNumeric(ERR_NORECIPIENT, "No recipient given");
+ return CmdResult::FAILURE;
+ }
// The target is a channel name.
if (*target == '#')
- return HandleChannelTarget(user, parameters, target, pmh);
+ return HandleChannelTarget(user, parameters, target, targetpfx);
// The target is a nickname.
return HandleUserTarget(user, parameters);
diff --git a/src/modules/m_ldapoper.cpp b/src/modules/m_ldapoper.cpp
index d50b9664c..68577155f 100644
--- a/src/modules/m_ldapoper.cpp
+++ b/src/modules/m_ldapoper.cpp
@@ -1,7 +1,8 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2020 Christos Triantafyllidis <ctria@users.noreply.github.com>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014, 2018 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013-2014 Adam <Adam@anope.org>
*
diff --git a/src/modules/m_mlock.cpp b/src/modules/m_mlock.cpp
index 9eb461ce0..75892bced 100644
--- a/src/modules/m_mlock.cpp
+++ b/src/modules/m_mlock.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2013, 2017 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2012, 2014-2015 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2012 William Pitcock <nenolod@dereferenced.org>
+ * Copyright (C) 2012 Ariadne Conill <ariadne@dereferenced.org>
*
* 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
diff --git a/src/modules/m_namesx.cpp b/src/modules/m_namesx.cpp
index cc025ca27..301f81c37 100644
--- a/src/modules/m_namesx.cpp
+++ b/src/modules/m_namesx.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013, 2018-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2018-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
@@ -28,12 +28,14 @@
#include "modules/isupport.h"
#include "modules/names.h"
#include "modules/who.h"
+#include "modules/whois.h"
class ModuleNamesX
: public Module
, public ISupport::EventListener
, public Names::EventListener
, public Who::EventListener
+ , public Whois::LineEventListener
{
private:
Cap::Capability cap;
@@ -44,6 +46,7 @@ class ModuleNamesX
, ISupport::EventListener(this)
, Names::EventListener(this)
, Who::EventListener(this)
+ , Whois::LineEventListener(this)
, cap(this, "multi-prefix")
{
}
@@ -103,6 +106,50 @@ class ModuleNamesX
numeric.GetParams()[flag_index].append(prefixes, 1, std::string::npos);
return MOD_RES_PASSTHRU;
}
+
+ ModResult OnWhoisLine(Whois::Context& whois, Numeric::Numeric& numeric) override
+ {
+ if (numeric.GetNumeric() != RPL_WHOISCHANNELS || !cap.IsEnabled(whois.GetSource()))
+ return MOD_RES_PASSTHRU;
+
+ // :testnet.inspircd.org 319 test Sadie :#test ~#inspircd
+ if (numeric.GetParams().size() < 2 || numeric.GetParams().back().empty())
+ return MOD_RES_PASSTHRU;
+
+ std::stringstream newchannels;
+ irc::spacesepstream channelstream(numeric.GetParams().back());
+ for (std::string channel; channelstream.GetToken(channel); )
+ {
+ size_t hashpos = channel.find('#');
+ if (!hashpos || hashpos == std::string::npos)
+ {
+ // The entry is malformed or the user has no privs.
+ newchannels << channel << ' ';
+ continue;
+ }
+
+ Channel* chan = ServerInstance->FindChan(channel.substr(hashpos));
+ if (!chan)
+ {
+ // Should never happen.
+ newchannels << channel << ' ';
+ continue;
+ }
+
+ Membership* memb = chan->GetUser(whois.GetTarget());
+ if (!memb)
+ {
+ // Should never happen.
+ newchannels << channel << ' ';
+ continue;
+ }
+
+ newchannels << memb->GetAllPrefixChars() << chan->name << ' ';
+ }
+
+ numeric.GetParams().back() = newchannels.str();
+ return MOD_RES_PASSTHRU;
+ }
};
MODULE_INIT(ModuleNamesX)
diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp
index b0b7ba1ca..521a008cb 100644
--- a/src/modules/m_override.cpp
+++ b/src/modules/m_override.cpp
@@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2020 satmd <satmd@users.noreply.github.com>
* Copyright (C) 2017 B00mX0r <b00mx0r@aureus.pw>
* Copyright (C) 2017 Adam <Adam@anope.org>
* Copyright (C) 2016 Sheogorath <sheogorath@shivering-isles.com>
diff --git a/src/modules/m_pbkdf2.cpp b/src/modules/m_pbkdf2.cpp
index 006e0a8a1..bde142382 100644
--- a/src/modules/m_pbkdf2.cpp
+++ b/src/modules/m_pbkdf2.cpp
@@ -3,8 +3,8 @@
*
* Copyright (C) 2018, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
+ * Copyright (C) 2014, 2020 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2014, 2016 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2014 Daniel Vassdal <shutter@canternet.org>
*
* 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
diff --git a/src/modules/m_permchannels.cpp b/src/modules/m_permchannels.cpp
index 031fc512e..17f7783a9 100644
--- a/src/modules/m_permchannels.cpp
+++ b/src/modules/m_permchannels.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2014 Justin Crawford <Justasic@Gmail.com>
- * Copyright (C) 2013-2014, 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013-2014, 2017-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013-2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2012, 2014 Adam <Adam@anope.org>
diff --git a/src/modules/m_repeat.cpp b/src/modules/m_repeat.cpp
index 3b79890db..0f78821cc 100644
--- a/src/modules/m_repeat.cpp
+++ b/src/modules/m_repeat.cpp
@@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2021 iwalkalone <iwalkalone69@gmail.com>
* Copyright (C) 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2018-2019 linuxdaemon <linuxdaemon.irc@gmail.com>
* Copyright (C) 2018 Matt Schatz <genius3000@g3k.solutions>
diff --git a/src/modules/m_sanick.cpp b/src/modules/m_sanick.cpp
index 229f0919d..a82875799 100644
--- a/src/modules/m_sanick.cpp
+++ b/src/modules/m_sanick.cpp
@@ -5,7 +5,7 @@
* Copyright (C) 2012-2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2010 Craig Edwards <brain@inspircd.org>
- * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
*
diff --git a/src/modules/m_sha1.cpp b/src/modules/m_sha1.cpp
index c6fa7c21d..d4cdd9696 100644
--- a/src/modules/m_sha1.cpp
+++ b/src/modules/m_sha1.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2017 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2017, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2016 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/modules/m_shun.cpp b/src/modules/m_shun.cpp
index ce5399b57..91882fc66 100644
--- a/src/modules/m_shun.cpp
+++ b/src/modules/m_shun.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
* Copyright (C) 2017-2018 B00mX0r <b00mx0r@aureus.pw>
- * Copyright (C) 2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2018, 2020-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2013, 2015-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012, 2018-2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 Jens Voss <DukePyrolator@anope.org>
diff --git a/src/modules/m_spanningtree/capab.cpp b/src/modules/m_spanningtree/capab.cpp
index b3a664cb6..04df62a1f 100644
--- a/src/modules/m_spanningtree/capab.cpp
+++ b/src/modules/m_spanningtree/capab.cpp
@@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2014, 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2014, 2017-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
diff --git a/src/modules/m_spanningtree/misccommands.cpp b/src/modules/m_spanningtree/misccommands.cpp
index 95a479f3d..81819748e 100644
--- a/src/modules/m_spanningtree/misccommands.cpp
+++ b/src/modules/m_spanningtree/misccommands.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
diff --git a/src/modules/m_spanningtree/override_map.cpp b/src/modules/m_spanningtree/override_map.cpp
index 3be35e9ef..68d1f637c 100644
--- a/src/modules/m_spanningtree/override_map.cpp
+++ b/src/modules/m_spanningtree/override_map.cpp
@@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2017 B00mX0r <b00mx0r@aureus.pw>
* Copyright (C) 2016, 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014 Adam <Adam@anope.org>
diff --git a/src/modules/m_spanningtree/svsnick.cpp b/src/modules/m_spanningtree/svsnick.cpp
index 19066eede..6d06c4d4a 100644
--- a/src/modules/m_spanningtree/svsnick.cpp
+++ b/src/modules/m_spanningtree/svsnick.cpp
@@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
- * Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/modules/m_sslinfo.cpp b/src/modules/m_sslinfo.cpp
index b542fb580..3f43e146b 100644
--- a/src/modules/m_sslinfo.cpp
+++ b/src/modules/m_sslinfo.cpp
@@ -3,12 +3,11 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2010 Adam <Adam@anope.org>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
* Copyright (C) 2006-2007, 2009-2010 Craig Edwards <brain@inspircd.org>
*
diff --git a/src/socket.cpp b/src/socket.cpp
index 6a2d6f743..fe5de8847 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
* Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2017-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2011 Daniel De Graaf <danieldg@inspircd.org>
diff --git a/src/socketengines/socketengine_epoll.cpp b/src/socketengines/socketengine_epoll.cpp
index f4406bc7b..83042d886 100644
--- a/src/socketengines/socketengine_epoll.cpp
+++ b/src/socketengines/socketengine_epoll.cpp
@@ -4,8 +4,8 @@
* Copyright (C) 2014-2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2014, 2016 Adam <Adam@anope.org>
* Copyright (C) 2013, 2017, 2019 Sadie Powell <sadie@witchery.services>
- * Copyright (C) 2012 William Pitcock <nenolod@dereferenced.org>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ * Copyright (C) 2012 Ariadne Conill <ariadne@dereferenced.org>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
* Copyright (C) 2007-2008 Dennis Friis <peavey@inspircd.org>
diff --git a/src/usermanager.cpp b/src/usermanager.cpp
index 7deefacd2..7b976966f 100644
--- a/src/usermanager.cpp
+++ b/src/usermanager.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2019 iwalkalone <iwalkalone69@gmail.com>
* Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2013-2016, 2018 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2013, 2018-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015 Adam <Adam@anope.org>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
diff --git a/src/users.cpp b/src/users.cpp
index 8779ba358..bd99c234d 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
* Copyright (C) 2018 systocrat <systocrat@outlook.com>
* Copyright (C) 2018 Dylan Frank <b00mx0r@aureus.pw>
- * Copyright (C) 2013, 2016-2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2013, 2016-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2013 ChrisTX <xpipe@hotmail.de>
* Copyright (C) 2013 Adam <Adam@anope.org>