Merge pull request #6577 from Icinga/fix/setup-api-including-users-file

Include api user configuration file during api setup
This commit is contained in:
Michael Friedrich 2019-02-11 16:41:46 +01:00 committed by GitHub
commit b81f7a7415
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 0 deletions

View File

@ -207,6 +207,15 @@ bool ApiSetupUtility::SetupMasterApiUser()
bool ApiSetupUtility::SetupMasterEnableApi()
{
/*
* Ensure the api-users.conf file is included, when conf.d inclusion is disabled.
*/
if (!NodeUtility::GetConfigurationIncludeState("\"conf.d\"", true))
NodeUtility::UpdateConfiguration("\"conf.d/api-users.conf\"", true, false);
/*
* Enable the API feature
*/
Log(LogInformation, "cli", "Enabling the 'api' feature.");
FeatureUtility::EnableFeatures({ "api" });

View File

@ -265,6 +265,49 @@ void NodeUtility::SerializeObject(std::ostream& fp, const Dictionary::Ptr& objec
fp << "}\n\n";
}
/*
* Returns true if the include is found, otherwise false
*/
bool NodeUtility::GetConfigurationIncludeState(const String& value, bool recursive) {
String configurationFile = Configuration::ConfigDir + "/icinga2.conf";
Log(LogInformation, "cli")
<< "Reading '" << configurationFile << "'.";
std::ifstream ifp(configurationFile.CStr());
String affectedInclude = value;
if (recursive)
affectedInclude = "include_recursive " + affectedInclude;
else
affectedInclude = "include " + affectedInclude;
bool isIncluded = false;
std::string line;
while(std::getline(ifp, line)) {
/*
* Trying to find if the inclusion is enabled.
* First hit breaks out of the loop.
*/
if (line.compare(0, affectedInclude.GetLength(), affectedInclude) == 0) {
isIncluded = true;
/*
* We can safely break out here, since an enabled include always win.
*/
break;
}
}
ifp.close();
return isIncluded;
}
/*
* include = false, will comment out the include statement
* include = true, will add an include statement or uncomment a statement if one is existing

View File

@ -44,6 +44,7 @@ public:
static bool WriteNodeConfigObjects(const String& filename, const Array::Ptr& objects);
static bool GetConfigurationIncludeState(const String& value, bool recursive);
static bool UpdateConfiguration(const String& value, bool include, bool recursive);
static void UpdateConstant(const String& name, const String& value);