]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Clean up the <security:runas{user,group}> code.
authorPeter Powell <petpow@saberuk.com>
Tue, 12 Sep 2017 13:28:20 +0000 (14:28 +0100)
committerPeter Powell <petpow@saberuk.com>
Tue, 12 Sep 2017 14:00:16 +0000 (15:00 +0100)
- Get rid of unnecessary temporary values.
- Remove an erroneous usage comment.
- Reset errno before the call to setgroups.
- Unify the two stage initialisation of g/u.

src/inspircd.cpp

index 44ba3c2a9076039e0c1280a0b71773521b165dc3..a3be309bfb75cd63ff3fb7ba2c3e74174803f812 100644 (file)
@@ -501,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);
                }
        }