]> granicus.if.org Git - icinga2/commitdiff
Fix attribute validation for PUT queries
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 12 Nov 2015 08:31:27 +0000 (09:31 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 12 Nov 2015 09:13:46 +0000 (10:13 +0100)
fixes #10601

lib/icinga/downtime.cpp
lib/icinga/downtime.ti
lib/remote/configobjectutility.cpp

index acbf207fef26d484ca90be736e85b5555c19ebf5..307cba3996c114f7c694f815ab8a0b9fd39b341e 100644 (file)
@@ -320,7 +320,12 @@ void Downtime::TriggerDowntime(void)
        {
                ObjectLock olock(triggers);
                BOOST_FOREACH(const String& triggerName, triggers) {
-                       Downtime::GetByName(triggerName)->TriggerDowntime();
+                       Downtime::Ptr downtime = Downtime::GetByName(triggerName);
+
+                       if (!downtime)
+                               continue;
+
+                       downtime->TriggerDowntime();
                }
        }
 
index e6be9d44338ff770e347b9ec333d0fae0a97d4c2..cc47027074bc4f8594e3d455b1414f39772d0649 100644 (file)
@@ -76,9 +76,9 @@ class Downtime : ConfigObject < DowntimeNameComposer
        [state] double trigger_time;
        [config] bool fixed;
        [config] double duration;
-       [state] name(Downtime) triggered_by;
+       [config] name(Downtime) triggered_by;
        [config] String scheduled_by;
-       [config] Array::Ptr triggers {
+       [state] Array::Ptr triggers {
                default {{{ return new Array(); }}}
        };
        int legacy_id;
index 1747fe71f3aec3c13726c6b65e725daaeddcc675..442c5c80a1afd68d5a2df91d83a63a28342f3e94 100644 (file)
@@ -71,14 +71,14 @@ String ConfigObjectUtility::CreateObjectConfig(const Type::Ptr& type, const Stri
 
                ObjectLock olock(attrs);
                BOOST_FOREACH(const Dictionary::Pair& kv, attrs) {
-                       int fid = type->GetFieldId(kv.first);
+                       int fid = type->GetFieldId(kv.first.SubStr(0, kv.first.FindFirstOf(".")));
 
                        if (fid < 0)
                                BOOST_THROW_EXCEPTION(ScriptError("Invalid attribute specified: " + kv.first));
 
                        Field field = type->GetFieldInfo(fid);
 
-                       if (field.Attributes & FANoUserModify)
+                       if (!(field.Attributes & FAConfig) || kv.first == "name")
                                BOOST_THROW_EXCEPTION(ScriptError("Attribute is marked for internal use only and may not be set: " + kv.first));
                }
        }