Improve config validation for arrays of object names

fixes #12556
This commit is contained in:
Gunnar Beutner 2016-08-26 10:36:53 +02:00
parent 4f46e59af3
commit dac0ff9343
2 changed files with 12 additions and 2 deletions

View File

@ -41,7 +41,10 @@ void Zone::OnAllConfigLoaded(void)
if (endpoints) { if (endpoints) {
ObjectLock olock(endpoints); ObjectLock olock(endpoints);
for (const String& endpoint : endpoints) { for (const String& endpoint : endpoints) {
Endpoint::GetByName(endpoint)->SetCachedZone(this); Endpoint::Ptr ep = Endpoint::GetByName(endpoint);
if (ep)
ep->SetCachedZone(this);
} }
} }

View File

@ -535,7 +535,14 @@ void ClassCompiler::HandleClass(const Klass& klass, const ClassDebugInfo&)
std::string ftype = FieldTypeToIcingaName(field, true); std::string ftype = FieldTypeToIcingaName(field, true);
if (field.Type.IsName) { if (field.Type.IsName) {
m_Impl << "\t" << "if (!avalue.IsEmpty() && !utils.ValidateName(\"" << field.Type.TypeName << "\", avalue))" << std::endl m_Impl << "\t" << "if (";
if (field.Type.ArrayRank > 0)
m_Impl << "avalue.IsEmpty() || ";
else
m_Impl << "!avalue.IsEmpty() && ";
m_Impl << "!utils.ValidateName(\"" << field.Type.TypeName << "\", avalue))" << std::endl
<< "\t\t" << "BOOST_THROW_EXCEPTION(ValidationError(dynamic_cast<ConfigObject *>(this), boost::assign::list_of(\"" << field.Name << "\"), \"Object '\" + avalue + \"' of type '" << field.Type.TypeName << "\t\t" << "BOOST_THROW_EXCEPTION(ValidationError(dynamic_cast<ConfigObject *>(this), boost::assign::list_of(\"" << field.Name << "\"), \"Object '\" + avalue + \"' of type '" << field.Type.TypeName
<< "' does not exist.\"));" << std::endl; << "' does not exist.\"));" << std::endl;
} else if (field.Type.ArrayRank > 0 && (ftype == "Number" || ftype == "Boolean")) { } else if (field.Type.ArrayRank > 0 && (ftype == "Number" || ftype == "Boolean")) {