/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * 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 Adam <Adam@anope.org>
#ifndef _WIN32
#include <unistd.h>
#include <sys/resource.h>
- #include <dlfcn.h>
#include <getopt.h>
#include <pwd.h> // setuid
#include <grp.h> // setgid
InspIRCd* ServerInstance = NULL;
-/** Seperate from the other casemap tables so that code *can* still exclusively rely on RFC casemapping
+/** Separate from the other casemap tables so that code *can* still exclusively rely on RFC casemapping
* if it must.
*
* This is provided as a pointer so that modules can change it to their custom mapping tables,
#endif
}
+ // Checks whether the server clock has skipped too much and warn about it if it has.
+ void CheckTimeSkip(time_t oldtime, time_t newtime)
+ {
+ if (!ServerInstance->Config->TimeSkipWarn)
+ return;
+
+ time_t timediff = newtime - oldtime;
+
+ if (timediff > ServerInstance->Config->TimeSkipWarn)
+ ServerInstance->SNO->WriteToSnoMask('a', "\002Performance warning!\002 Server clock jumped forwards by %lu seconds!", timediff);
+
+ else if (timediff < -ServerInstance->Config->TimeSkipWarn)
+ ServerInstance->SNO->WriteToSnoMask('a', "\002Performance warning!\002 Server clock jumped backwards by %lu seconds!", labs(timediff));
+ }
+
// Drops to the unprivileged user/group specified in <security:runas{user,group}>.
void DropRoot()
{
default:
// An unknown option was specified.
- std::cout << con_red << "Error:" << con_reset << " unknown option '" << argv[optind - 1] << "'." << std::endl
+ std::cout << con_red << "Error:" << con_reset << " unknown option '" << argv[optind] << "'." << std::endl
<< con_bright << "Usage: " << con_reset << argv[0] << " [--config <file>] [--debug] [--nofork] [--nolog]" << std::endl
<< std::string(strlen(argv[0]) + 8, ' ') << "[--nopid] [--runasroot] [--version]" << std::endl;
ServerInstance->Exit(EXIT_STATUS_ARGV);
std::cout << con_bright << "Hints:" << con_reset << std::endl
<< "- For TCP/IP listeners try using a public IP address in <bind:address> instead" << std::endl
- << " of * of leaving it blank." << std::endl
+ << " of * or leaving it blank." << std::endl
<< "- For UNIX socket listeners try enabling <bind:rewrite> to replace old sockets." << std::endl;
}
}
std::cout << "InspIRCd Process ID: " << con_green << getpid() << con_reset << std::endl;
/* During startup we read the configuration now, not in
- * a seperate thread
+ * a separate thread
*/
this->Config->Read();
this->Config->Apply(NULL, "");
UpdateTime();
/* Run background module timers every few seconds
- * (the docs say modules shouldnt rely on accurate
+ * (the docs say modules should not rely on accurate
* timing using this event, so we dont have to
* time this exactly).
*/
if (TIME.tv_sec != OLDTIME)
{
CollectStats();
-
- if (Config->TimeSkipWarn)
- {
- time_t timediff = TIME.tv_sec - OLDTIME;
-
- if (timediff > Config->TimeSkipWarn)
- SNO->WriteToSnoMask('a', "\002Performance warning!\002 Server clock jumped forwards by %lu seconds!", timediff);
-
- else if (timediff < -Config->TimeSkipWarn)
- SNO->WriteToSnoMask('a', "\002Performance warning!\002 Server clock jumped backwards by %lu seconds!", labs(timediff));
- }
+ CheckTimeSkip(OLDTIME, TIME.tv_sec);
OLDTIME = TIME.tv_sec;