]> 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 abd63f95394406bb2ec73327d000a2f3c776fa29..a3be309bfb75cd63ff3fb7ba2c3e74174803f812 100644 (file)
@@ -226,7 +226,6 @@ 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),
@@ -234,8 +233,6 @@ InspIRCd::InspIRCd(int argc, char** argv) :
 {
        ServerInstance = this;
 
-       Extensions.Register(&OperQuit);
-
        FailedPortList pl;
        // Flag variables passed to getopt_long() later
        int do_version = 0, do_nofork = 0, do_debug = 0,
@@ -504,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);
                }
        }