Merge branch 'insp3' into master.

This commit is contained in:
Sadie Powell 2021-02-28 19:16:40 +00:00
commit c22c7e5a99
83 changed files with 375 additions and 198 deletions

View File

@ -20,8 +20,9 @@ jobs:
^./.github/workflows
^./.mailmap
^./vendor
^./make/directive.pm:281:atleast
^./make/directive.pm:.*:atleast
^./src/modules/m_disable.cpp:119:existant
^.*\.\(cpp\|h\).*eiter$
ALLTIME$
alltime$
Alltime$\
@ -29,7 +30,7 @@ jobs:
- uses: sobolevn/misspell-fixer-action@master
with:
options: '-rvnfuRVD .'
- uses: peter-evans/create-pull-request@v2.4.4
- uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ env.REF_BRANCH }}+fix-spellings-${{ env.DATE }}

7
configure vendored
View File

@ -6,8 +6,7 @@
# Copyright (C) 2020 Daniel Vassdal <shutter@canternet.org>
# Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
# Copyright (C) 2019 Anatole Denis <natolumin@rezel.net>
# Copyright (C) 2017 emerson <github@emersonveenstra.net>
# Copyright (C) 2013-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
# Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
# Copyright (C) 2010 Daniel De Graaf <danieldg@inspircd.org>
@ -204,10 +203,10 @@ if (defined $opt_portable) {
$config{RUNTIME_DIR} = $opt_runtime_dir // $config{DATA_DIR};
$config{SCRIPT_DIR} = $opt_script_dir // $config{BASE_DIR};
} elsif (defined $opt_system) {
$config{BASE_DIR} = $opt_prefix // '/var/lib/inspircd';
$config{BASE_DIR} = $opt_prefix // '/';
$config{BINARY_DIR} = $opt_binary_dir // '/usr/sbin';
$config{CONFIG_DIR} = $opt_config_dir // '/etc/inspircd';
$config{DATA_DIR} = $opt_data_dir // '/var/inspircd';
$config{DATA_DIR} = $opt_data_dir // '/var/lib/inspircd';
$config{EXAMPLE_DIR} = $opt_example_dir // '/usr/share/doc/inspircd';
$config{LOG_DIR} = $opt_log_dir // '/var/log/inspircd';
$config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1';

View File

@ -30,14 +30,14 @@ parameter for this command.
<helpop key="cuser" title="User Commands" value="
ACCEPT ADMIN AWAY COMMANDS CYCLE DCCALLOW
FPART INFO INVITE ISON JOIN KICK
KNOCK LINKS LIST LUSERS MAP MKPASSWD
MODE MODULES MONITOR MOTD NAMES NICK
NOTICE OPER PART PASS PING PONG
PRIVMSG QUIT REMOVE SERVLIST SETNAME SILENCE
SQUERY SSLINFO STATS TBAN TIME TITLE
TOPIC UNINVITE USER USERHOST VERSION VHOST
WATCH WHO WHOIS WHOWAS
FPART HEXIP INFO INVITE ISON JOIN
KICK KNOCK LINKS LIST LUSERS MAP
MKPASSWD MODE MODULES MONITOR MOTD NAMES
NICK NOTICE OPER PART PASS PING
PONG PRIVMSG QUIT REMOVE SERVLIST SETNAME
SILENCE SQUERY SSLINFO STATS TBAN TIME
TITLE TOPIC UNINVITE USER USERHOST VERSION
VHOST WATCH WHO WHOIS WHOWAS
">
<helpop key="squery" title="/SQUERY <target> :<message>" value="
@ -150,6 +150,13 @@ This behaves identically to /REMOVE. /REMOVE is a built-in mIRC command
which caused trouble for some users.
">
<helpop key="hexip" title="/HEXIP <hex-ip|raw-ip>" value="
If the specified argument is a raw IP address then respond with the
hex encoded equivalent as if sent by an ident gateway. Otherwise, if
the specified argument is a hex encoded IP address then respond with
the equivalent raw IP address.
">
<helpop key="silence" title="/SILENCE [(+|-)<mask> [CcdiNnPpTtx]]" value="
A server-side ignore of the given n!u@h mask. If the optional flags field is
specified then it must contain one or more flags which specify what kind of

View File

@ -292,6 +292,10 @@
# This setting only has effect when the connectban module is loaded.
#useconnectban="yes"
# useconnflood: Defines if users in this class should be exempt from connflood limits.
# This setting only has effect when the connflood module is loaded.
#useconnflood="yes"
# usednsbl: Defines whether or not users in this class are subject to DNSBL. Default is yes.
# This setting only has effect when the dnsbl module is loaded.
#usednsbl="yes"

View File

@ -8,6 +8,7 @@
globalmax="100"
localmax="100"
useconnectban="no"
useconnflood="no"
usednsbl="no">
<connect name="IRCCloud (Brockwell)" parent="IRCCloud" allow="192.184.10.118">

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2013, 2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2012-2013, 2017 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2013, 2017, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
* Copyright (C) 2011-2012 Adam <Adam@anope.org>

View File

@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2013-2014, 2017 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013-2014, 2017, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013-2014, 2016 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can

View File

@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013, 2016 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2016, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
*

View File

@ -5,7 +5,7 @@
* Copyright (C) 2018 Chris Novakovic <chrisnovakovic@users.noreply.github.com>
* Copyright (C) 2013-2014, 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
* Copyright (C) 2012-2014, 2016-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2014, 2016-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) 2008 Thomas Stagner <aquanight@inspircd.org>

View File

@ -274,6 +274,7 @@ class CoreExport ModeHandler : public ServiceProvider
* @return MODEACTION_ALLOW to allow the mode, or MODEACTION_DENY to prevent the mode, also see the description of 'parameter'.
*/
virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding); /* Can change the mode parameter as its a ref */
/**
* If your mode is a listmode, then this method will be called for displaying an item list, e.g. on MODE \#channel +modechar
* without any parameter or other modes in the command.
@ -290,6 +291,15 @@ class CoreExport ModeHandler : public ServiceProvider
*/
virtual void OnParameterMissing(User* user, User* dest, Channel* channel);
/** Called when a user attempts to set a mode and the parameter is invalid.
* @param user The user issuing the mode change
* @param targetchannel Either the channel target or NULL if changing a user mode.
* @param targetuser Either the user target or NULL if changing a channel mode.
* @param parameter The invalid parameter.
*/
virtual void OnParameterInvalid(User* user, Channel* targetchannel, User* targetuser, const std::string& parameter);
/**
* If your mode is a listmode, this method will be called to display an empty list (just the end of list numeric)
* @param user The user issuing the command

View File

@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2018-2019 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2018-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2015-2016, 2018 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can

View File

@ -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-2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013, 2015-2016 Adam <Adam@anope.org>
*

View File

@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2015-2016 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
@ -28,6 +29,22 @@ namespace Whois
class Context;
}
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
};
class Whois::EventListener : public Events::ModuleEventListener
{
public:

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2017 B00mX0r <b00mx0r@aureus.pw>
* Copyright (C) 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013, 2015-2018, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015-2018, 2020-2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013 Adam <Adam@anope.org>
* Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
@ -113,6 +113,8 @@ enum
ERR_CANNOTSENDTOCHAN = 404,
ERR_TOOMANYCHANNELS = 405,
ERR_WASNOSUCHNICK = 406,
ERR_NOSUCHSERVICE = 408, // From RFC 2812.
ERR_NORECIPIENT = 411,
ERR_NOTEXTTOSEND = 412,
ERR_UNKNOWNCOMMAND = 421,
ERR_NOMOTD = 422,

View File

@ -157,7 +157,7 @@ class CoreExport UserManager
/** Return a count of fully registered connections on the network
* @return The number of registered users on the network
*/
unsigned int RegisteredUserCount() { return this->clientlist.size() - this->UnregisteredUserCount() - this->ULineCount(); }
unsigned int RegisteredUserCount() { return this->clientlist.size() - this->UnregisteredUserCount() - this->ServiceCount(); }
/** Return a count of local unregistered (before NICK/USER) users
* @return The number of local unregistered (unknown) connections
@ -167,7 +167,7 @@ class CoreExport UserManager
/** Return a count of users on a services servers.
* @return The number of users on services servers.
*/
unsigned int ULineCount() const { return this->all_services.size(); }
unsigned int ServiceCount() const { return this->all_services.size(); }
/** Return a count of local registered users
* @return The number of registered local users

View File

@ -3,7 +3,7 @@
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2014-2015 Attila Molnar <attilamolnar@hush.com>
# Copyright (C) 2013, 2015-2019 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013, 2015-2019, 2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012 Robby <robby@chatbelgie.be>
# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
#

View File

@ -1,7 +1,7 @@
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2014-2017, 2019-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2014-2017, 2019-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

View File

@ -2,7 +2,7 @@
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2020 Nicole Kleinhoff <ilbelkyr@shalture.org>
# Copyright (C) 2013-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012 Robby <robby@chatbelgie.be>
# Copyright (C) 2007-2008 Craig Edwards <brain@inspircd.org>
# Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>

View File

@ -1,7 +1,7 @@
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2014-2017, 2019 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2014-2017, 2019-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

View File

@ -1,7 +1,7 @@
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2016-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2016-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

View File

@ -2,7 +2,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

View File

@ -1,7 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2014, 2016, 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014, 2016, 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

View File

@ -6,9 +6,8 @@
# Copyright (C) 2015 Steven Van Acker <steven@singularity.be>
# Copyright (C) 2015 Attila Molnar <attilamolnar@hush.com>
# Copyright (C) 2014 Dan Parsons <dparsons@nyip.net>
# Copyright (C) 2013-2014, 2016-2019 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2014, 2016-2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012 Robby <robby@chatbelgie.be>
# Copyright (C) 2012 Adam <Adam@anope.org>
# Copyright (C) 2011 DjSlash <djslash@djslash.org>
# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
# Copyright (C) 2008-2009 Robin Burchell <robin+git@viroteck.net>

View File

@ -2,7 +2,7 @@
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2016 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2014-2015, 2017 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2014-2015, 2017, 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

View File

@ -4,7 +4,7 @@
#
# Copyright (C) 2019 iwalkalone <iwalkalone69@gmail.com>
# Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
# Copyright (C) 2013, 2015-2016, 2018 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013, 2015-2016, 2018, 2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012 Robby <robby@chatbelgie.be>
# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
#

View File

@ -2,7 +2,7 @@
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2012-2014, 2017-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012-2014, 2017-2021 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2012 Robby <robby@chatbelgie.be>
# Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
# Copyright (C) 2008-2009 Robin Burchell <robin+git@viroteck.net>

View File

@ -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>

View File

@ -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>
*

View File

@ -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>

View File

@ -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
};

View File

@ -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);

View File

@ -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>

View File

@ -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);

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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.

View File

@ -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>

View File

@ -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>

View File

@ -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;
}

View File

@ -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

View File

@ -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);

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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;
}
}

View File

@ -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

View File

@ -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

View File

@ -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());
}

View File

@ -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>

View File

@ -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();

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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);

View File

@ -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>
*

View File

@ -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

View File

@ -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)

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>
*

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>
*

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -2,7 +2,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

View File

@ -3,7 +3,7 @@
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2020 Nicole Kleinhoff <ilbelkyr@shalture.org>
# Copyright (C) 2013-2017, 2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2017, 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

View File

@ -2,7 +2,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

View File

@ -2,7 +2,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

View File

@ -2,7 +2,7 @@
#
# InspIRCd -- Internet Relay Chat Daemon
#
# Copyright (C) 2013-2016, 2018-2020 Sadie Powell <sadie@witchery.services>
# Copyright (C) 2013-2016, 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

View File

@ -2,7 +2,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

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2020 Matt Schatz <genius3000@g3k.solutions>
* Copyright (C) 2013-2015 Attila Molnar <attilamolnar@hush.com>
* Copyright (C) 2013, 2015, 2018-2019 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2013, 2015, 2018-2019, 2021 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012-2013 ChrisTX <xpipe@hotmail.de>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2011, 2014, 2019 Adam <Adam@anope.org>