]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Move linuxdaemon and Sheogorath to former contributors.
[user/henk/code/inspircd.git] / src / inspircd.cpp
index dea4b45755fcfa595b91fc2c5164f91c7ae83448..8cbb83d6fcab2b561de23cd41aacd34a10bda47a 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * 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>
@@ -36,7 +37,6 @@
 #ifndef _WIN32
        #include <unistd.h>
        #include <sys/resource.h>
-       #include <dlfcn.h>
        #include <getopt.h>
        #include <pwd.h> // setuid
        #include <grp.h> // setgid
@@ -53,7 +53,7 @@
 
 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,
@@ -136,6 +136,21 @@ namespace
 #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()
        {
@@ -307,7 +322,7 @@ namespace
 
                                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);
@@ -317,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);
                }
 
@@ -373,7 +388,7 @@ namespace
 
                        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;
                }
        }
@@ -430,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())
        {
@@ -475,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
@@ -506,10 +522,10 @@ 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);
+               FILE* newstdout = fdopen(dup(STDOUT_FILENO), "w");
+               FileWriter* fw = new FileWriter(newstdout, 1);
                FileLogStream* fls = new FileLogStream(LOG_RAWIO, fw);
                Logs->AddLogTypes("*", fls, true);
        }
@@ -530,7 +546,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
        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, "");
@@ -661,24 +677,14 @@ void InspIRCd::Run()
                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;