]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Clean up the <security:runas{user,group}> code.
[user/henk/code/inspircd.git] / src / inspircd.cpp
index eb24cdea0a2b0d924e8a116f6e4bbd7639c17bd5..a3be309bfb75cd63ff3fb7ba2c3e74174803f812 100644 (file)
@@ -194,7 +194,7 @@ bool InspIRCd::DaemonSeed()
 #endif
 }
 
-void InspIRCd::WritePID(const std::string &filename)
+void InspIRCd::WritePID(const std::string& filename, bool exitonfail)
 {
 #ifndef _WIN32
        std::string fname(filename);
@@ -208,9 +208,11 @@ void InspIRCd::WritePID(const std::string &filename)
        }
        else
        {
-               std::cout << "Failed to write PID-file '" << fname << "', exiting." << std::endl;
-               this->Logs->Log("STARTUP", LOG_DEFAULT, "Failed to write PID-file '%s', exiting.",fname.c_str());
-               Exit(EXIT_STATUS_PID);
+               if (exitonfail)
+                       std::cout << "Failed to write PID-file '" << fname << "', exiting." << std::endl;
+               this->Logs->Log("STARTUP", LOG_DEFAULT, "Failed to write PID-file '%s'%s", fname.c_str(), (exitonfail ? ", exiting." : ""));
+               if (exitonfail)
+                       Exit(EXIT_STATUS_PID);
        }
 #endif
 }
@@ -224,17 +226,13 @@ InspIRCd::InspIRCd(int argc, char** argv) :
          * THIS MUST MATCH THE ORDER OF DECLARATION OF THE FUNCTORS, e.g. the methods
          * themselves within the class.
          */
-        OperQuit("operquit", ExtensionItem::EXT_USER, NULL),
         GenRandom(&HandleGenRandom),
         IsChannel(&HandleIsChannel),
         IsNick(&HandleIsNick),
-        IsIdent(&HandleIsIdent),
-        OnCheckExemption(&HandleOnCheckExemption)
+        IsIdent(&HandleIsIdent)
 {
        ServerInstance = this;
 
-       Extensions.Register(&OperQuit);
-
        FailedPortList pl;
        // Flag variables passed to getopt_long() later
        int do_version = 0, do_nofork = 0, do_debug = 0,
@@ -324,7 +322,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
        if (do_version)
        {
-               std::cout << std::endl << INSPIRCD_VERSION << " " << INSPIRCD_REVISION << std::endl;
+               std::cout << std::endl << INSPIRCD_VERSION << std::endl;
                Exit(EXIT_STATUS_NOERROR);
        }
 
@@ -341,7 +339,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 
        if (do_debug)
        {
-               FileWriter* fw = new FileWriter(stdout);
+               FileWriter* fw = new FileWriter(stdout, 1);
                FileLogStream* fls = new FileLogStream(LOG_RAWIO, fw);
                Logs->AddLogTypes("*", fls, true);
        }
@@ -366,7 +364,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
                }
        }
 
-       std::cout << con_green << "InspIRCd - Internet Relay Chat Daemon" << con_reset << ", compiled on " __DATE__ " at " __TIME__ << std::endl;
+       std::cout << con_green << "InspIRCd - Internet Relay Chat Daemon" << con_reset << std::endl;
        std::cout << "For contributors & authors: " << con_green << "See /INFO Output" << con_reset << std::endl;
 
 #ifndef _WIN32
@@ -503,61 +501,46 @@ InspIRCd::InspIRCd(int argc, char** argv) :
        Logs->Log("STARTUP", LOG_DEFAULT, "Startup complete as '%s'[%s], %d max open sockets", Config->ServerName.c_str(),Config->GetSID().c_str(), SocketEngine::GetMaxFds());
 
 #ifndef _WIN32
-       std::string SetUser = Config->ConfValue("security")->getString("runasuser");
-       std::string SetGroup = Config->ConfValue("security")->getString("runasgroup");
+       ConfigTag* security = Config->ConfValue("security");
+
+       const std::string SetGroup = security->getString("runasgroup");
        if (!SetGroup.empty())
        {
-               int ret;
-
-               // setgroups
-               ret = setgroups(0, NULL);
-
-               if (ret == -1)
+               errno = 0;
+               if (setgroups(0, NULL) == -1)
                {
                        this->Logs->Log("STARTUP", LOG_DEFAULT, "setgroups() failed (wtf?): %s", strerror(errno));
                        this->QuickExit(0);
                }
 
-               // setgid
-               struct group *g;
-
-               errno = 0;
-               g = getgrnam(SetGroup.c_str());
-
+               struct group* g = getgrnam(SetGroup.c_str());
                if (!g)
                {
                        this->Logs->Log("STARTUP", LOG_DEFAULT, "getgrnam(%s) failed (wrong group?): %s", SetGroup.c_str(), strerror(errno));
                        this->QuickExit(0);
                }
 
-               ret = setgid(g->gr_gid);
-
-               if (ret == -1)
+               if (setgid(g->gr_gid) == -1)
                {
-                       this->Logs->Log("STARTUP", LOG_DEFAULT, "setgid() failed (wrong group?): %s", strerror(errno));
+                       this->Logs->Log("STARTUP", LOG_DEFAULT, "setgid(%d) failed (wrong group?): %s", g->gr_gid, strerror(errno));
                        this->QuickExit(0);
                }
        }
 
+       const std::string SetUser = security->getString("runasuser");
        if (!SetUser.empty())
        {
-               // setuid
-               struct passwd *u;
-
                errno = 0;
-               u = getpwnam(SetUser.c_str());
-
+               struct passwd* u = getpwnam(SetUser.c_str());
                if (!u)
                {
                        this->Logs->Log("STARTUP", LOG_DEFAULT, "getpwnam(%s) failed (wrong user?): %s", SetUser.c_str(), strerror(errno));
                        this->QuickExit(0);
                }
 
-               int ret = setuid(u->pw_uid);
-
-               if (ret == -1)
+               if (setuid(u->pw_uid) == -1)
                {
-                       this->Logs->Log("STARTUP", LOG_DEFAULT, "setuid() failed (wrong user?): %s", strerror(errno));
+                       this->Logs->Log("STARTUP", LOG_DEFAULT, "setuid(%d) failed (wrong user?): %s", u->pw_uid, strerror(errno));
                        this->QuickExit(0);
                }
        }