]> granicus.if.org Git - icinga2/commitdiff
Implement validator support for function objects
authorGunnar Beutner <gunnar@beutner.name>
Tue, 27 Jan 2015 09:55:14 +0000 (10:55 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 27 Jan 2015 09:55:14 +0000 (10:55 +0100)
fixes #8291

lib/config/config_lexer.ll
lib/config/config_parser.yy
lib/config/typerule.cpp
lib/config/typerule.hpp
lib/icinga/icinga-type.conf

index bfa7a9851f85c444708c17a712a8b36051544a7d..169fd7dba830c9466d9333b1f5bd4a33def2c03b 100644 (file)
@@ -174,6 +174,7 @@ do {                                                        \
 %string                                { yylval->type = TypeString; return T_TYPE_STRING; }
 %scalar                                { yylval->type = TypeScalar; return T_TYPE_SCALAR; }
 %any                           { yylval->type = TypeAny; return T_TYPE_ANY; }
+%function                      { yylval->type = TypeFunction; return T_TYPE_FUNCTION; }
 %name                          { yylval->type = TypeName; return T_TYPE_NAME; }
 %validator                     { return T_VALIDATOR; }
 %require                       { return T_REQUIRE; }
index 6c3b683a3a2248e43a1e7cefc509a28f6243daa7..2c1b27b80e2afd0d21e42fb743c58fadea6e1c86 100644 (file)
@@ -152,6 +152,7 @@ static void MakeRBinaryOp(Expression** result, Expression *left, Expression *rig
 %token <type> T_TYPE_STRING "string (T_TYPE_STRING)"
 %token <type> T_TYPE_SCALAR "scalar (T_TYPE_SCALAR)"
 %token <type> T_TYPE_ANY "any (T_TYPE_ANY)"
+%token <type> T_TYPE_FUNCTION "function (T_TYPE_FUNCTION)"
 %token <type> T_TYPE_NAME "name (T_TYPE_NAME)"
 %token T_VALIDATOR "%validator (T_VALIDATOR)"
 %token T_REQUIRE "%require (T_REQUIRE)"
@@ -435,6 +436,7 @@ type: T_TYPE_DICTIONARY
        | T_TYPE_STRING
        | T_TYPE_SCALAR
        | T_TYPE_ANY
+       | T_TYPE_FUNCTION
        | T_TYPE_NAME
        ;
 
index aeff328eeea4f6713b1cf4573e0526834bcd1aee..513d666ac4fd5c8ec924f2a0a7bd03a85ceeb471 100644 (file)
@@ -73,6 +73,9 @@ bool TypeRule::MatchValue(const Value& value, String *hint, const TypeRuleUtilit
                case TypeArray:
                        return value.IsObjectType<Array>();
 
+               case TypeFunction:
+                       return value.IsObjectType<Function>();
+
                case TypeName:
                        if (!value.IsScalar())
                                return false;
index 43a309c396838810151ee93fab0b2c4e4b1c7ed7..a4fe8faa27b368cfeadb475528c038dc1100129d 100644 (file)
@@ -1,84 +1,85 @@
-/******************************************************************************\r
- * Icinga 2                                                                   *\r
- * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org)    *\r
- *                                                                            *\r
- * This program is free software; you can redistribute it and/or              *\r
- * modify it under the terms of the GNU General Public License                *\r
- * as published by the Free Software Foundation; either version 2             *\r
- * of the License, or (at your option) any later version.                     *\r
- *                                                                            *\r
- * This program is distributed in the hope that it will be useful,            *\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of             *\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *\r
- * GNU General Public License for more details.                               *\r
- *                                                                            *\r
- * You should have received a copy of the GNU General Public License          *\r
- * along with this program; if not, write to the Free Software Foundation     *\r
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *\r
- ******************************************************************************/\r
-\r
-#ifndef TYPERULE_H\r
-#define TYPERULE_H\r
-\r
-#include "config/i2-config.hpp"\r
-#include "config/typerulelist.hpp"\r
-#include "base/debuginfo.hpp"\r
-\r
-namespace icinga\r
-{\r
-\r
-/**\r
- * Utilities for type rules.\r
- *\r
- * @ingroup config\r
- */\r
-class I2_CONFIG_API TypeRuleUtilities\r
-{\r
-public:\r
-       virtual bool ValidateName(const String& type, const String& name, String *hint) const;\r
-};\r
-\r
-/**\r
- * The allowed type for a type rule.\r
- *\r
- * @ingroup config\r
- */\r
-enum TypeSpecifier\r
-{\r
-       TypeAny,\r
-       TypeScalar,\r
-       TypeNumber,\r
-       TypeString,\r
-       TypeDictionary,\r
-       TypeArray,\r
-       TypeName\r
-};\r
-\r
-/**\r
- * A configuration type rule.\r
- *\r
- * @ingroup config\r
- */\r
-struct I2_CONFIG_API TypeRule\r
-{\r
-public:\r
-       TypeRule(TypeSpecifier type, const String& nameType,\r
-           const String& namePattern, const TypeRuleList::Ptr& subRules,\r
-           const DebugInfo& debuginfo);\r
-\r
-       TypeRuleList::Ptr GetSubRules(void) const;\r
-\r
-       bool MatchName(const String& name) const;\r
-       bool MatchValue(const Value& value, String *hint, const TypeRuleUtilities *utils) const;\r
-\r
-private:\r
-       TypeSpecifier m_Type;\r
-       String m_NameType;\r
-       String m_NamePattern;\r
-       TypeRuleList::Ptr m_SubRules;\r
-       DebugInfo m_DebugInfo;\r
-};\r
-\r
-}\r
-\r
-#endif /* TYPERULE_H */\r
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org)    *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#ifndef TYPERULE_H
+#define TYPERULE_H
+
+#include "config/i2-config.hpp"
+#include "config/typerulelist.hpp"
+#include "base/debuginfo.hpp"
+
+namespace icinga
+{
+
+/**
+ * Utilities for type rules.
+ *
+ * @ingroup config
+ */
+class I2_CONFIG_API TypeRuleUtilities
+{
+public:
+       virtual bool ValidateName(const String& type, const String& name, String *hint) const;
+};
+
+/**
+ * The allowed type for a type rule.
+ *
+ * @ingroup config
+ */
+enum TypeSpecifier
+{
+       TypeAny,
+       TypeScalar,
+       TypeNumber,
+       TypeString,
+       TypeDictionary,
+       TypeArray,
+       TypeFunction,
+       TypeName
+};
+
+/**
+ * A configuration type rule.
+ *
+ * @ingroup config
+ */
+struct I2_CONFIG_API TypeRule
+{
+public:
+       TypeRule(TypeSpecifier type, const String& nameType,
+           const String& namePattern, const TypeRuleList::Ptr& subRules,
+           const DebugInfo& debuginfo);
+
+       TypeRuleList::Ptr GetSubRules(void) const;
+
+       bool MatchName(const String& name) const;
+       bool MatchValue(const Value& value, String *hint, const TypeRuleUtilities *utils) const;
+
+private:
+       TypeSpecifier m_Type;
+       String m_NameType;
+       String m_NamePattern;
+       TypeRuleList::Ptr m_SubRules;
+       DebugInfo m_DebugInfo;
+};
+
+}
+
+#endif /* TYPERULE_H */
index 2e0970faef9d02f8235091aea59eecbdf1e8c117..5c2401c09cabb6b97f0dc50e723f4be0d8254897 100644 (file)
        %attribute %string "display_name",
 
        %require "update",
-       %attribute %any "update",
+       %attribute %function "update",
 
 /*  %if (methods.update == "LegacyTimePeriod") { */
 //     %require "ranges",
        %validator "ValidateCommandAttributes",
 
        %require "execute",
-       %attribute %any "execute",
+       %attribute %function "execute",
 
 /*  %if (methods.execute == "PluginNotification" || methods.execute == "PluginCheck" || methods.execute == "PluginEvent") { */
 //     %require "command",