Improve error message for setgroups/initgroups/setuid

fixes #8294
This commit is contained in:
Gunnar Beutner 2015-02-09 14:58:20 +01:00
parent 96aa503dbe
commit 9dd0fba02f
1 changed files with 7 additions and 2 deletions

View File

@ -362,6 +362,7 @@ int Main(void)
}
} else if (command && command->GetImpersonationLevel() == ImpersonateIcinga) {
String group = Application::GetRunAsGroup();
String user = Application::GetRunAsUser();
errno = 0;
struct group *gr = getgrnam(group.CStr());
@ -382,6 +383,8 @@ int Main(void)
if (!vm.count("reload-internal") && setgroups(0, NULL) < 0) {
Log(LogCritical, "cli")
<< "setgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "cli")
<< "Please re-run this command as a privileged user or using the \"" << user << "\" account.";
return EXIT_FAILURE;
}
@ -392,8 +395,6 @@ int Main(void)
}
}
String user = Application::GetRunAsUser();
errno = 0;
struct passwd *pw = getpwnam(user.CStr());
@ -414,12 +415,16 @@ int Main(void)
if (!vm.count("reload-internal") && initgroups(user.CStr(), pw->pw_gid) < 0) {
Log(LogCritical, "cli")
<< "initgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "cli")
<< "Please re-run this command as a privileged user or using the \"" << user << "\" account.";
return EXIT_FAILURE;
}
if (setuid(pw->pw_uid) < 0) {
Log(LogCritical, "cli")
<< "setuid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "cli")
<< "Please re-run this command as a privileged user or using the \"" << user << "\" account.";
return EXIT_FAILURE;
}
}