From 77a8864d58a496c8af7eddb329cc668781b5c373 Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Sat, 16 Jan 2021 04:48:16 +0000
Subject: Fix not rejecting attempts to set snomasks with SAMODE/override.
---
src/coremods/core_user/umode_s.cpp | 7 +++++++
1 file changed, 7 insertions(+)
(limited to 'src')
diff --git a/src/coremods/core_user/umode_s.cpp b/src/coremods/core_user/umode_s.cpp
index 5994f97fb..7080b277f 100644
--- a/src/coremods/core_user/umode_s.cpp
+++ b/src/coremods/core_user/umode_s.cpp
@@ -104,6 +104,13 @@ std::string ModeUserServerNoticeMask::ProcessNoticeMasks(User* user, const std::
user->WriteNumeric(ERR_UNKNOWNSNOMASK, *i, "is an unknown snomask character");
continue;
}
+ else if (!user->IsOper())
+ {
+ user->WriteNumeric(ERR_NOPRIVILEGES, InspIRCd::Format("Permission Denied - Only operators may %sset snomask %c",
+ adding ? "" : "un", *i));
+ continue;
+
+ }
else if (!user->HasSnomaskPermission(*i))
{
user->WriteNumeric(ERR_NOPRIVILEGES, InspIRCd::Format("Permission Denied - Oper type %s does not have access to snomask %c",
--
cgit v1.3.1-10-gc9f91
From 267d85ac62018b12bc03b53a9c82ed39b4ca7f44 Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Mon, 18 Jan 2021 05:38:11 +0000
Subject: Add default empty openssl compiler flags.
This makes things easier for users who are using InspIRCd on OSes
where OpenSSL is part of the base system.
---
src/modules/extra/m_ssl_openssl.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index 7880ebd56..a9588d7b4 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -28,7 +28,7 @@
* along with this program. If not, see .
*/
-/// $CompilerFlags: find_compiler_flags("openssl")
+/// $CompilerFlags: find_compiler_flags("openssl" "")
/// $LinkerFlags: find_linker_flags("openssl" "-lssl -lcrypto")
/// $PackageInfo: require_system("arch") openssl pkgconf
--
cgit v1.3.1-10-gc9f91
From a59ed4b39443eb788c15c65501898ca374387e2e Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Mon, 18 Jan 2021 06:56:18 +0000
Subject: Add a new runtime directory and move the pid file to it.
The data directory is intended for persistent files whereas the pid
file is ephemeral. This distinction doesn't matter by default but
on system-wide installs ephemeral runtime files go in /var/run or
/run instead.
---
configure | 10 +++++++++-
docs/conf/inspircd.conf.example | 4 ++--
include/configreader.h | 4 ++++
make/configure.pm | 1 +
make/template/apparmor | 1 +
make/template/config.h | 3 +++
make/template/inspircd | 18 +++---------------
src/configreader.cpp | 1 +
src/inspircd.cpp | 2 +-
9 files changed, 25 insertions(+), 19 deletions(-)
(limited to 'src')
diff --git a/configure b/configure
index 223fc4d14..724970cad 100755
--- a/configure
+++ b/configure
@@ -66,6 +66,7 @@ my ($opt_binary_dir,
$opt_module_dir,
$opt_portable,
$opt_prefix,
+ $opt_runtime_dir,
$opt_script_dir,
$opt_socketengine,
$opt_system,
@@ -99,6 +100,7 @@ exit 1 unless GetOptions(
'module-dir=s' => \$opt_module_dir,
'portable' => \$opt_portable,
'prefix=s' => \$opt_prefix,
+ 'runtime-dir=s' => \$opt_runtime_dir,
'script-dir=s' => \$opt_script_dir,
'socketengine=s' => \$opt_socketengine,
'system' => \$opt_system,
@@ -137,6 +139,7 @@ our $interactive = !(
defined $opt_module_dir ||
defined $opt_portable ||
defined $opt_prefix ||
+ defined $opt_runtime_dir ||
defined $opt_script_dir ||
defined $opt_socketengine ||
defined $opt_system ||
@@ -203,6 +206,7 @@ if (defined $opt_portable) {
$config{LOG_DIR} = $opt_log_dir // 'logs';
$config{MANUAL_DIR} = $opt_manual_dir // 'manuals';
$config{MODULE_DIR} = $opt_module_dir // 'modules';
+ $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';
@@ -213,7 +217,8 @@ if (defined $opt_portable) {
$config{LOG_DIR} = $opt_log_dir // '/var/log/inspircd';
$config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1';
$config{MODULE_DIR} = $opt_module_dir // '/usr/lib/inspircd';
- $config{SCRIPT_DIR} = $opt_script_dir // '/usr/share/inspircd'
+ $config{RUNTIME_DIR} = $opt_runtime_dir // '/var/run';
+ $config{SCRIPT_DIR} = $opt_script_dir // '/usr/share/inspircd';
} else {
$config{BASE_DIR} = rel2abs $opt_prefix // $config{BASE_DIR} // catdir $RealDir, 'run';
$config{BINARY_DIR} = $opt_binary_dir // $config{BINARY_DIR} // catdir $config{BASE_DIR}, 'bin';
@@ -223,6 +228,7 @@ if (defined $opt_portable) {
$config{LOG_DIR} = $opt_log_dir // $config{LOG_DIR} // catdir $config{BASE_DIR}, 'logs';
$config{MANUAL_DIR} = $opt_manual_dir // $config{MANUAL_DIR} // catdir $config{BASE_DIR}, 'manuals';
$config{MODULE_DIR} = $opt_module_dir // $config{MODULE_DIR} // catdir $config{BASE_DIR}, 'modules';
+ $config{RUNTIME_DIR} = $opt_runtime_dir // $config{RUNTIME_DIR} // $config{DATA_DIR};
$config{SCRIPT_DIR} = $opt_script_dir // $config{SCRIPT_DIR} // $config{BASE_DIR};
}
@@ -345,6 +351,7 @@ if (prompt_bool $interactive, $question, 0) {
$config{MODULE_DIR} = prompt_dir $interactive, 'In what directory are modules to be placed?', $config{MODULE_DIR};
$config{SCRIPT_DIR} = prompt_dir $interactive, 'In what directory are scripts to be placed?', $config{SCRIPT_DIR};
$config{EXAMPLE_DIR} = $config{CONFIG_DIR} . '/examples';
+ $config{RUNTIME_DIR} = $config{DATA_DIR};
}
# Configure module settings.
@@ -461,6 +468,7 @@ print_format <<"EOM";
<|GREEN Log:|> $config{LOG_DIR}
<|GREEN Manual:|> $config{MANUAL_DIR}
<|GREEN Module:|> $config{MODULE_DIR}
+ <|GREEN Runtime:|> $config{RUNTIME_DIR}
<|GREEN Script:|> $config{SCRIPT_DIR}
<|GREEN Execution Group:|> $config{GROUP} ($config{GID})
diff --git a/docs/conf/inspircd.conf.example b/docs/conf/inspircd.conf.example
index 3d16d4eba..06ad9669d 100644
--- a/docs/conf/inspircd.conf.example
+++ b/docs/conf/inspircd.conf.example
@@ -531,8 +531,8 @@
# rehash the ircd from the shell or to terminate the ircd from the #
# shell using shell scripts, perl scripts, etc... and to monitor the #
# ircd's state via cron jobs. If this is a relative path, it will be #
-# relative to the configuration directory, and if it is not defined, #
-# the default of 'inspircd.pid' is used. #
+# relative to the runtime directory, and if it is not defined, the #
+# default of 'inspircd.pid' is used. #
# #
#
diff --git a/include/configreader.h b/include/configreader.h
index 3a5ea9c60..8a548fcbf 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -250,12 +250,16 @@ class CoreExport ServerConfig
/** Module path */
std::string Module;
+ /** Runtime path */
+ std::string Runtime;
+
ServerPaths(ConfigTag* tag);
std::string PrependConfig(const std::string& fn) const { return FileSystem::ExpandPath(Config, fn); }
std::string PrependData(const std::string& fn) const { return FileSystem::ExpandPath(Data, fn); }
std::string PrependLog(const std::string& fn) const { return FileSystem::ExpandPath(Log, fn); }
std::string PrependModule(const std::string& fn) const { return FileSystem::ExpandPath(Module, fn); }
+ std::string PrependRuntime(const std::string& fn) const { return FileSystem::ExpandPath(Runtime, fn); }
};
/** Holds a complete list of all connect blocks
diff --git a/make/configure.pm b/make/configure.pm
index 91e2cc7d6..001de5fc7 100644
--- a/make/configure.pm
+++ b/make/configure.pm
@@ -192,6 +192,7 @@ sub cmd_update {
say 'Updating...';
my %config = read_config_file(CONFIGURE_CACHE_FILE);
$config{EXAMPLE_DIR} //= catdir $config{CONFIG_DIR}, 'examples';
+ $config{RUNTIME_DIR} //= $config{DATA_DIR};
my %compiler = get_compiler_info($config{CXX});
my %version = get_version $config{DISTRIBUTION};
parse_templates(\%config, \%compiler, \%version);
diff --git a/make/template/apparmor b/make/template/apparmor
index 83c248c55..ded5634e6 100644
--- a/make/template/apparmor
+++ b/make/template/apparmor
@@ -37,6 +37,7 @@
@MODULE_DIR@/core_*.so mr,
@MODULE_DIR@/m_*.so mr,
@LOG_DIR@/** w,
+ @RUNTIME_DIR@/** rw,
# Required by the ldap module:
#include
diff --git a/make/template/config.h b/make/template/config.h
index 034191893..97dd15453 100644
--- a/make/template/config.h
+++ b/make/template/config.h
@@ -43,6 +43,9 @@
/** The default location that module files are stored in. */
#define INSPIRCD_MODULE_PATH "@MODULE_DIR@"
+/** The default location that runtime files are stored in. */
+#define INSPIRCD_RUNTIME_PATH "@RUNTIME_DIR@"
+
/** The URL of the InspIRCd docs site. */
#define INSPIRCD_DOCS "https://docs.inspircd.org/@VERSION_MAJOR@/"
diff --git a/make/template/inspircd b/make/template/inspircd
index 0150bb994..4b316e0e0 100644
--- a/make/template/inspircd
+++ b/make/template/inspircd
@@ -66,7 +66,7 @@ my $basepath = "@BASE_DIR@";
my $confpath = "@CONFIG_DIR@";
my $binpath = "@BINARY_DIR@";
my $runpath = "@BASE_DIR@";
-my $datadir = "@DATA_DIR@";
+my $runtimedir = "@RUNTIME_DIR@";
my $valgrindlogpath = "$basepath/valgrindlogs";
my $executable = "inspircd";
my $version = "@VERSION_FULL@";
@@ -359,18 +359,6 @@ sub cmd_stop()
# Generic Helper Functions.
###
-# GetPidfile Version 2 - Now With Include Support..
-# I beg for months for include support in insp, then..
-# when it is added, it comes around and BITES ME IN THE ASS,
-# because i then have to code support into this script.. Evil.
-
-# Craig got bitten in the ass again --
-# in 1.1 beta the include file is manditory, therefore
-# if we cant find it, default to %conf%/inspircd.pid.
-# Note, this also contains a fix for when the pid file is
-# defined, but defined in a comment (line starts with #)
-# -- Brain
-
my %filesparsed;
sub getpidfile
@@ -404,7 +392,7 @@ sub getpidfile
if (($i =~ //i) && ($i !~ /^#/))
{
# Set the PID file and return.
- $pidfile = expand_fragment $datadir, $1;
+ $pidfile = expand_fragment $runtimedir, $1;
return;
}
}
@@ -426,7 +414,7 @@ sub getpidfile
}
# End of includes / No includes found. Using default.
- $pidfile = $datadir . "/inspircd.pid";
+ $pidfile = $runtimedir . "/inspircd.pid";
}
sub getstatus {
diff --git a/src/configreader.cpp b/src/configreader.cpp
index f96836507..3977be25e 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -57,6 +57,7 @@ ServerConfig::ServerPaths::ServerPaths(ConfigTag* tag)
, Data(tag->getString("datadir", INSPIRCD_DATA_PATH, 1))
, Log(tag->getString("logdir", INSPIRCD_LOG_PATH, 1))
, Module(tag->getString("moduledir", INSPIRCD_MODULE_PATH, 1))
+ , Runtime(tag->getString("runtimedir", INSPIRCD_RUNTIME_PATH, 1))
{
}
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 5760e631b..df5dc8647 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -445,7 +445,7 @@ void InspIRCd::WritePID(const std::string& filename, bool exitonfail)
return;
}
- std::string fname = ServerInstance->Config->Paths.PrependData(filename.empty() ? "inspircd.pid" : filename);
+ std::string fname = ServerInstance->Config->Paths.PrependRuntime(filename.empty() ? "inspircd.pid" : filename);
std::ofstream outfile(fname.c_str());
if (outfile.is_open())
{
--
cgit v1.3.1-10-gc9f91
From f9a663185402b9689c784dc87c317ac204c53f03 Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Mon, 18 Jan 2021 07:07:50 +0000
Subject: Fix showing the start header when using --version.
---
src/inspircd.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index df5dc8647..ba7e08eff 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -332,7 +332,7 @@ namespace
if (do_version)
{
- std::cout << std::endl << INSPIRCD_VERSION << std::endl;
+ std::cout << INSPIRCD_VERSION << std::endl;
ServerInstance->Exit(EXIT_STATUS_NOERROR);
}
@@ -490,6 +490,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->Config->cmdline.argv = argv;
this->Config->cmdline.argc = argc;
+ ParseOptions();
#ifdef _WIN32
// Initialize the console values
@@ -521,7 +522,6 @@ InspIRCd::InspIRCd(int argc, char** argv)
<< "See " << con_green << "/INFO" << con_reset << " for contributors & authors" << std::endl
<< std::endl;
- ParseOptions();
if (Config->cmdline.forcedebug)
{
FileWriter* fw = new FileWriter(stdout, 1);
--
cgit v1.3.1-10-gc9f91
From 6223be60dee0aa4f69b53b102a9d1aadd0dde047 Mon Sep 17 00:00:00 2001
From: iwalkalone
Date: Mon, 18 Jan 2021 08:22:44 +0100
Subject: Implemented configurable kick message for the repeat module (#1835).
---
docs/conf/modules.conf.example | 8 +++++++-
src/modules/m_repeat.cpp | 10 +++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example
index 0a85ef5ca..2f38f52a4 100644
--- a/docs/conf/modules.conf.example
+++ b/docs/conf/modules.conf.example
@@ -1900,7 +1900,13 @@
# less CPU usage. Increasing this beyond 512 doesn't have
# any effect, as the maximum length of a message on IRC
# cannot exceed that.
-#
+# kickmessage - Kick message when * is specified
+#
#
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
diff --git a/src/modules/m_repeat.cpp b/src/modules/m_repeat.cpp
index 89f5a1291..e6568732b 100644
--- a/src/modules/m_repeat.cpp
+++ b/src/modules/m_repeat.cpp
@@ -90,6 +90,7 @@ class RepeatMode : public ParamMode >
unsigned int MaxBacklog;
unsigned int MaxDiff;
unsigned int MaxMessageSize;
+ std::string KickMessage;
ModuleSettings() : MaxLines(0), MaxSecs(0), MaxBacklog(0), MaxDiff() { }
};
@@ -251,6 +252,8 @@ class RepeatMode : public ParamMode >
if (newsize > ServerInstance->Config->Limits.MaxLine)
newsize = ServerInstance->Config->Limits.MaxLine;
Resize(newsize);
+
+ ms.KickMessage = conf->getString("kickmessage", "Repeat flood");
}
std::string GetModuleSettings() const
@@ -258,6 +261,11 @@ class RepeatMode : public ParamMode >
return ConvToStr(ms.MaxLines) + ":" + ConvToStr(ms.MaxSecs) + ":" + ConvToStr(ms.MaxDiff) + ":" + ConvToStr(ms.MaxBacklog);
}
+ std::string GetKickMessage() const
+ {
+ return ms.KickMessage;
+ }
+
void SerializeParam(Channel* chan, const ChannelSettings* chset, std::string& out)
{
chset->serialize(out);
@@ -402,7 +410,7 @@ class RepeatModule : public Module
ServerInstance->Modes->Process(ServerInstance->FakeClient, chan, NULL, changelist);
}
- memb->chan->KickUser(ServerInstance->FakeClient, user, "Repeat flood");
+ memb->chan->KickUser(ServerInstance->FakeClient, user, rm.GetKickMessage());
return MOD_RES_DENY;
}
return MOD_RES_PASSTHRU;
--
cgit v1.3.1-10-gc9f91
From e626ceeb3336db66121395b4c4c2a3b37f52032f Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Mon, 18 Jan 2021 09:39:00 +0000
Subject: Improve the robustness of the DNSBL module.
- Handle DNSBLs that return invalid lookup results.
- Fix DNSBLs that return non-local addresses blocking connections.
- Fix silently failing when a DNSBL returns no IPv4 results.
- General code cleanup.
---
src/modules/m_dnsbl.cpp | 56 ++++++++++++++++++++++++++++++-------------------
1 file changed, 35 insertions(+), 21 deletions(-)
(limited to 'src')
diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp
index 37819c05c..f8bbb1a04 100644
--- a/src/modules/m_dnsbl.cpp
+++ b/src/modules/m_dnsbl.cpp
@@ -78,41 +78,55 @@ class DNSBLResolver : public DNS::Request
if (!them || them->client_sa != theirsa)
return;
+ int i = countExt.get(them);
+ if (i)
+ countExt.set(them, i - 1);
+
+ // The DNSBL reply must contain an A result.
const DNS::ResourceRecord* const ans_record = r->FindAnswerOfType(DNS::QUERY_A);
if (!ans_record)
+ {
+ ConfEntry->stats_misses++;
+ ServerInstance->SNO->WriteGlobalSno('d', "%s returned an result with no IPv4 address.",
+ ConfEntry->name.c_str());
return;
+ }
- // All replies should be in 127.0.0.0/8
- if (ans_record->rdata.compare(0, 4, "127.") != 0)
+ // The DNSBL reply must be a valid IPv4 address.
+ in_addr resultip;
+ if (inet_pton(AF_INET, ans_record->rdata.c_str(), &resultip) != 1)
{
- ServerInstance->SNO->WriteGlobalSno('d', "DNSBL: %s returned address outside of acceptable subnet 127.0.0.0/8: %s", ConfEntry->domain.c_str(), ans_record->rdata.c_str());
ConfEntry->stats_misses++;
+ ServerInstance->SNO->WriteGlobalSno('d', "%s returned an invalid IPv4 address: %s",
+ ConfEntry->name.c_str(), ans_record->rdata.c_str());
return;
}
- int i = countExt.get(them);
- if (i)
- countExt.set(them, i - 1);
-
- // Now we calculate the bitmask: 256*(256*(256*a+b)+c)+d
+ // The DNSBL reply should be in the 127.0.0.0/8 range.
+ if ((resultip.s_addr & 0xFF) != 127)
+ {
+ ConfEntry->stats_misses++;
+ ServerInstance->SNO->WriteGlobalSno('d', "%s returned an IPv4 address which is outside of the 127.0.0.0/8 subnet: %s",
+ ConfEntry->name.c_str(), ans_record->rdata.c_str());
+ return;
+ }
- unsigned int bitmask = 0, record = 0;
bool match = false;
- in_addr resultip;
-
- inet_pton(AF_INET, ans_record->rdata.c_str(), &resultip);
-
+ unsigned int result = 0;
switch (ConfEntry->type)
{
case DNSBLConfEntry::A_BITMASK:
- bitmask = resultip.s_addr >> 24; /* Last octet (network byte order) */
- bitmask &= ConfEntry->bitmask;
- match = (bitmask != 0);
- break;
+ {
+ result = (resultip.s_addr >> 24) & ConfEntry->bitmask;
+ match = (result != 0);
+ break;
+ }
case DNSBLConfEntry::A_RECORD:
- record = resultip.s_addr >> 24; /* Last octet */
- match = (ConfEntry->records[record] == 1);
- break;
+ {
+ result = resultip.s_addr >> 24;
+ match = (ConfEntry->records[result] == 1);
+ break;
+ }
}
if (match)
@@ -212,7 +226,7 @@ class DNSBLResolver : public DNS::Request
}
ServerInstance->SNO->WriteGlobalSno('d', "Connecting user %s (%s) detected as being on the '%s' DNS blacklist with result %d",
- them->GetFullRealHost().c_str(), them->GetIPString().c_str(), ConfEntry->name.c_str(), (ConfEntry->type==DNSBLConfEntry::A_BITMASK) ? bitmask : record);
+ them->GetFullRealHost().c_str(), them->GetIPString().c_str(), ConfEntry->name.c_str(), result);
}
else
ConfEntry->stats_misses++;
--
cgit v1.3.1-10-gc9f91
From 4a126ad130b0a51449343de2f2db6becca0d2819 Mon Sep 17 00:00:00 2001
From: Sadie Powell
Date: Mon, 18 Jan 2021 10:22:05 +0000
Subject: Add a separate stats class for DNSBL errors.
---
src/modules/m_dnsbl.cpp | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
(limited to 'src')
diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp
index f8bbb1a04..9ad3b05e7 100644
--- a/src/modules/m_dnsbl.cpp
+++ b/src/modules/m_dnsbl.cpp
@@ -43,8 +43,16 @@ class DNSBLConfEntry : public refcountbase
unsigned long duration;
unsigned int bitmask;
unsigned char records[256];
- unsigned long stats_hits, stats_misses;
- DNSBLConfEntry(): type(A_BITMASK),duration(86400),bitmask(0),stats_hits(0), stats_misses(0) {}
+ unsigned long stats_hits, stats_misses, stats_errors;
+ DNSBLConfEntry()
+ : type(A_BITMASK)
+ , duration(86400)
+ , bitmask(0)
+ , stats_hits(0)
+ , stats_misses(0)
+ , stats_errors(0)
+ {
+ }
};
@@ -86,7 +94,7 @@ class DNSBLResolver : public DNS::Request
const DNS::ResourceRecord* const ans_record = r->FindAnswerOfType(DNS::QUERY_A);
if (!ans_record)
{
- ConfEntry->stats_misses++;
+ ConfEntry->stats_errors++;
ServerInstance->SNO->WriteGlobalSno('d', "%s returned an result with no IPv4 address.",
ConfEntry->name.c_str());
return;
@@ -96,7 +104,7 @@ class DNSBLResolver : public DNS::Request
in_addr resultip;
if (inet_pton(AF_INET, ans_record->rdata.c_str(), &resultip) != 1)
{
- ConfEntry->stats_misses++;
+ ConfEntry->stats_errors++;
ServerInstance->SNO->WriteGlobalSno('d', "%s returned an invalid IPv4 address: %s",
ConfEntry->name.c_str(), ans_record->rdata.c_str());
return;
@@ -105,7 +113,7 @@ class DNSBLResolver : public DNS::Request
// The DNSBL reply should be in the 127.0.0.0/8 range.
if ((resultip.s_addr & 0xFF) != 127)
{
- ConfEntry->stats_misses++;
+ ConfEntry->stats_errors++;
ServerInstance->SNO->WriteGlobalSno('d', "%s returned an IPv4 address which is outside of the 127.0.0.0/8 subnet: %s",
ConfEntry->name.c_str(), ans_record->rdata.c_str());
return;
@@ -248,6 +256,7 @@ class DNSBLResolver : public DNS::Request
return;
}
+ ConfEntry->stats_errors++;
ServerInstance->SNO->WriteGlobalSno('d', "An error occurred whilst checking whether %s (%s) is on the '%s' DNS blacklist: %s",
them->GetFullRealHost().c_str(), them->GetIPString().c_str(), ConfEntry->name.c_str(), this->manager->GetErrorStr(q->error).c_str());
}
@@ -478,20 +487,22 @@ class ModuleDNSBL : public Module, public Stats::EventListener
if (stats.GetSymbol() != 'd')
return MOD_RES_PASSTHRU;
- unsigned long total_hits = 0, total_misses = 0;
-
+ unsigned long total_hits = 0;
+ unsigned long total_misses = 0;
+ unsigned long total_errors = 0;
for (std::vector >::const_iterator i = DNSBLConfEntries.begin(); i != DNSBLConfEntries.end(); ++i)
{
total_hits += (*i)->stats_hits;
total_misses += (*i)->stats_misses;
+ total_errors += (*i)->stats_errors;
- stats.AddRow(304, "DNSBLSTATS DNSbl \"" + (*i)->name + "\" had " +
- ConvToStr((*i)->stats_hits) + " hits and " + ConvToStr((*i)->stats_misses) + " misses");
+ stats.AddRow(304, InspIRCd::Format("DNSBLSTATS \"%s\" had %lu hits, %lu misses, and %lu errors",
+ (*i)->name.c_str(), (*i)->stats_hits, (*i)->stats_misses, (*i)->stats_errors));
}
stats.AddRow(304, "DNSBLSTATS Total hits: " + ConvToStr(total_hits));
stats.AddRow(304, "DNSBLSTATS Total misses: " + ConvToStr(total_misses));
-
+ stats.AddRow(304, "DNSBLSTATS Total errors: " + ConvToStr(total_errors));
return MOD_RES_PASSTHRU;
}
};
--
cgit v1.3.1-10-gc9f91