Now we need to set what are the configs that will be used in each script. To set it, just add, in the .xml's script file: <config> <param name="..." policy="mandatory"|"optional"/> </config> For manage these configs, a new entity was created, called: OsinfoInstallConfigParam. And the OsinfoInstallScript entity is, now, keeping an internal list of the OsinfoInstallConfigParam entity. With these changes, applications that uses/will use libosinfo can check if an install script has some config to be set using, consulting by: - ConfigParam entity: osinfo_install_script_has_config_param(OsinfoInstallScript *script, const OsinfoInstallConfigParameter config_param); - Parameter name: osinfo_install_script_has_config_param_name(OsinfoInstallScript *script, const gchar* name); --- data/install-scripts/fedora.xml | 6 + data/install-scripts/windows-sif.xml | 5 + data/install-scripts/windows-unattend.xml | 9 ++ data/schemas/libosinfo.rng | 12 ++ docs/reference/Libosinfo.types | 1 + osinfo/Makefile.am | 1 + osinfo/libosinfo.syms | 8 + osinfo/osinfo.h | 1 + osinfo/osinfo_install_config_param.c | 234 ++++++++++++++++++++++++++++++ osinfo/osinfo_install_config_param.h | 83 +++++++++++ osinfo/osinfo_install_script.c | 49 ++++++- osinfo/osinfo_install_script.h | 12 +- osinfo/osinfo_loader.c | 36 +++++ 13 files changed, 455 insertions(+), 2 deletions(-) create mode 100644 osinfo/osinfo_install_config_param.c create mode 100644 osinfo/osinfo_install_config_param.h diff --git a/data/install-scripts/fedora.xml b/data/install-scripts/fedora.xml index 338a570..a608cdb 100644 --- a/data/install-scripts/fedora.xml +++ b/data/install-scripts/fedora.xml @@ -1,6 +1,12 @@ <libosinfo version="0.0.1"> <install-script id='http://fedoraproject.org/scripts/fedora/jeos'> <profile>jeos</profile> + <config> + <param name="admin-password" policy="optional"/> + <param name="l10n-keyboard" policy="optional"/> + <param name="l10n-language" policy="optional"/> + <param name="l10n-timezone" policy="optional"/> + </config> <template filename="fedora.ks"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" diff --git a/data/install-scripts/windows-sif.xml b/data/install-scripts/windows-sif.xml index 46b24ae..77fc2c5 100644 --- a/data/install-scripts/windows-sif.xml +++ b/data/install-scripts/windows-sif.xml @@ -1,6 +1,11 @@ <libosinfo version="0.0.1"> <install-script id='http://microsoft.com/windows/sif'> <profile>jeos</profile> + <config> + <param name="admin-password" policy="optional"/> + <param name="reg-product-key" policy="required"/> + <param name="user-realname" policy="required"/> + </config> <template filename="windows.sif"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml index 20e3e23..5698bc8 100644 --- a/data/install-scripts/windows-unattend.xml +++ b/data/install-scripts/windows-unattend.xml @@ -1,6 +1,15 @@ <libosinfo version="0.0.1"> <install-script id='http://microsoft.com/windows/unattend'> <profile>jeos</profile> + <config> + <param name="admin-password" policy="optional"/> + <param name="hardware-arch" policy="optional"/> + <param name="l10n-language" policy="optional"/> + <param name="user-login" policy="optional"/> + <param name="user-password" policy="optional"/> + <param name="user-realname" policy="optional"/> + <param name="reg-product-key" policy="required"/> + </config> <template filename="windows.xml"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng index 7c8d7f7..1392f74 100644 --- a/data/schemas/libosinfo.rng +++ b/data/schemas/libosinfo.rng @@ -410,6 +410,12 @@ <element name='profile'> <text/> </element> + <element name='config'> + <attribute name="name"/> + <attribute name="policy"> + <ref name='policies'/> + </attribute> + </element> <element name='product-key-format'> <text/> </element> @@ -479,4 +485,10 @@ <param name="pattern">\w+://.*</param> </data> </define> + + <define name='policies'> + <data type="string"> + <param name="pattern">required|optional</param> + </data> + </define> </grammar> diff --git a/docs/reference/Libosinfo.types b/docs/reference/Libosinfo.types index faf8643..8744ee6 100644 --- a/docs/reference/Libosinfo.types +++ b/docs/reference/Libosinfo.types @@ -9,6 +9,7 @@ osinfo_devicelist_get_type osinfo_entity_get_type osinfo_filter_get_type osinfo_install_config_get_type +osinfo_install_config_param_get_type osinfo_install_script_get_type osinfo_install_scriptlist_get_type osinfo_list_get_type diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am index f4aea47..68c4172 100644 --- a/osinfo/Makefile.am +++ b/osinfo/Makefile.am @@ -89,6 +89,7 @@ libosinfo_1_0_la_SOURCES = \ osinfo_devicelinklist.c \ osinfo_devicelinkfilter.c \ osinfo_install_config.c \ + osinfo_install_config_param.c \ osinfo_install_script.c \ osinfo_install_scriptlist.c \ osinfo_product.c \ diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms index ddf736e..1e55d0e 100644 --- a/osinfo/libosinfo.syms +++ b/osinfo/libosinfo.syms @@ -264,6 +264,8 @@ LIBOSINFO_0.2.0 { osinfo_install_config_set_user_administrator; osinfo_install_config_set_user_autologin; osinfo_install_config_set_hostname; + osinfo_install_config_param_get_type; + osinfo_install_config_param_new; osinfo_install_script_set_output_prefix; osinfo_install_script_get_type; osinfo_install_script_new; @@ -276,12 +278,18 @@ LIBOSINFO_0.2.0 { osinfo_install_script_generate_output_async; osinfo_install_script_get_profile; osinfo_install_script_get_uri; + osinfo_install_script_has_config_param; + osinfo_install_script_has_config_param_name; + osinfo_install_script_get_config_param_list; osinfo_install_scriptlist_new; osinfo_install_scriptlist_new_filtered; osinfo_install_scriptlist_new_union; osinfo_install_scriptlist_new_intersection; osinfo_install_scriptlist_new_copy; osinfo_install_scriptlist_get_type; + osinfo_install_config_param_new; + osinfo_install_config_param_get_name; + osinfo_install_config_param_get_policy; osinfo_db_get_install_script; osinfo_db_add_install_script; osinfo_db_get_install_script_list; diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h index aa06095..204569b 100644 --- a/osinfo/osinfo.h +++ b/osinfo/osinfo.h @@ -34,6 +34,7 @@ #include <osinfo/osinfo_devicelinklist.h> #include <osinfo/osinfo_devicelinkfilter.h> #include <osinfo/osinfo_install_config.h> +#include <osinfo/osinfo_install_config_param.h> #include <osinfo/osinfo_install_script.h> #include <osinfo/osinfo_install_scriptlist.h> #include <osinfo/osinfo_productlist.h> diff --git a/osinfo/osinfo_install_config_param.c b/osinfo/osinfo_install_config_param.c new file mode 100644 index 0000000..8a0ab56 --- /dev/null +++ b/osinfo/osinfo_install_config_param.c @@ -0,0 +1,234 @@ +/* + * libosinfo: + * + * Copyright (C) 2009-2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Fabiano Fidêncio <fabiano@xxxxxxxxxxxx> + */ + +#include <config.h> + +#include <osinfo/osinfo.h> + +G_DEFINE_TYPE (OsinfoInstallConfigParam, osinfo_install_config_param, OSINFO_TYPE_ENTITY); + +#define OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamPrivate)) + +/** + * SECTION:osinfo_install_config_param + * @short_description: OS install configuration parameters (and its policies) + * @see_also: #OsinfoInstallScript, #OsinfoInstallSciptConfig + * + * #OsinfoInstallConfigParam is an entity for representing all parameters that + * can be set in an automated installation. It is used to help applications to + * generate an automated installation script + */ + +struct _OsinfoInstallConfigParamPrivate +{ + gchar *name; + OsinfoInstallConfigParamPolicy policy; +}; + +enum { + PROP_0, + + PROP_NAME, + PROP_POLICY, +}; + +static void +osinfo_install_config_param_set_property(GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + OsinfoInstallConfigParam *config_param = + OSINFO_INSTALL_CONFIG_PARAM (object); + + switch (property_id) + { + case PROP_NAME: + config_param->priv->name = g_value_dup_string(value); + break; + case PROP_POLICY: + { + const gchar *policy = g_value_get_string(value); + if (g_strcmp0(policy, "required") == 0) + config_param->priv->policy = + OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED; + else if (g_strcmp0(policy, "optional") == 0) + config_param->priv->policy = + OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL; + break; + } + default: + /* We don't have any other property... */ + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +osinfo_install_config_param_get_property(GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + OsinfoInstallConfigParam *config_param = + OSINFO_INSTALL_CONFIG_PARAM (object); + + switch (property_id) + { + case PROP_NAME: + g_value_set_string(value, config_param->priv->name); + break; + case PROP_POLICY: + g_value_set_enum(value, config_param->priv->policy); + break; + default: + /* We don't have any other property... */ + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +osinfo_install_config_param_finalize(GObject *object) +{ + OsinfoInstallConfigParam *config_param = + OSINFO_INSTALL_CONFIG_PARAM(object); + g_free(config_param->priv->name); + + /* Chain up to the parent class */ + G_OBJECT_CLASS (osinfo_install_config_param_parent_class)->finalize (object); +} + +/* Init functions */ +static void +osinfo_install_config_param_class_init (OsinfoInstallConfigParamClass *klass) +{ + GObjectClass *g_klass = G_OBJECT_CLASS (klass); + GParamSpec *pspec; + + g_klass->set_property = osinfo_install_config_param_set_property; + g_klass->get_property = osinfo_install_config_param_get_property; + + /** + * OsinfoInstallConfigParam:name: + * + * The name of the configuration parameter. + **/ + pspec = g_param_spec_string("name", + "Name", + "Parameter name", + NULL, + G_PARAM_WRITABLE | + G_PARAM_READABLE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB); + g_object_class_install_property(g_klass, + PROP_NAME, + pspec); + /** + * OsinfoInstallConfigParam:policy: + * + * The policy of the configuration parameter. + **/ + pspec = g_param_spec_string("policy", + "Policy", + "Parameter policy", + NULL, + G_PARAM_WRITABLE | + G_PARAM_READABLE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB); + g_object_class_install_property(g_klass, + PROP_POLICY, + pspec); + + + g_klass->finalize = osinfo_install_config_param_finalize; + + g_type_class_add_private (klass, sizeof (OsinfoInstallConfigParamPrivate)); +} + +static void +osinfo_install_config_param_init (OsinfoInstallConfigParam *config_param) +{ + OsinfoInstallConfigParamPrivate *priv; + config_param->priv = priv = + OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(config_param); + + config_param->priv->name = NULL; + config_param->priv->policy = OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE; +} + + +/** + * osinfo_install_config_param_new: + * @name: the configuration parameter name + * @policy: the configuration parameter policy + * + * Construct a new configuration parameter to a #OsinfoInstallScript. + * + * Returns: (transfer full): the new configuration parameter + */ +OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name, + const gchar *policy) +{ + return g_object_new(OSINFO_TYPE_INSTALL_CONFIG_PARAM, + "name", name, + "policy", policy, + NULL); +} + +/** + * osinfo_install_config_param_get_name: + * @config_param: the configuration parameter + * + * Returns: (transfer none): the name of the configuration parameter + */ +const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param) +{ + return config_param->priv->name; +} + +/** + * osinfo_install_config_param_get_policy: + * @config_param: the configuration parameter + * + * Returns: (transfer none): the policy of the configuration parameter + */ +OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param) +{ + return config_param->priv->policy; +} + +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/osinfo/osinfo_install_config_param.h b/osinfo/osinfo_install_config_param.h new file mode 100644 index 0000000..dce47bc --- /dev/null +++ b/osinfo/osinfo_install_config_param.h @@ -0,0 +1,83 @@ +/* + * libosinfo: OS installation configuration + * + * Copyright (C) 2009-2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Fabiano Fidêncio <fabiano@xxxxxxxxxxxx> + */ + +#include <glib-object.h> + +#ifndef __OSINFO_INSTALL_CONFIG_PARAM_H__ +#define __OSINFO_INSTALL_CONFIG_PARAM_H__ + +/* + * Type macros. + */ +#define OSINFO_TYPE_INSTALL_CONFIG_PARAM (osinfo_install_config_param_get_type ()) +#define OSINFO_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParam)) +#define OSINFO_IS_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM)) +#define OSINFO_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass)) +#define OSINFO_IS_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM)) +#define OSINFO_INSTALL_CONFIG_PARAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass)) + +typedef struct _OsinfoInstallConfigParam OsinfoInstallConfigParam; +typedef struct _OsinfoInstallConfigParamClass OsinfoInstallConfigParamClass; +typedef struct _OsinfoInstallConfigParamPrivate OsinfoInstallConfigParamPrivate; + +typedef enum { + OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE, + OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED, + OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL, +} OsinfoInstallConfigParamPolicy; + +/* object */ +struct _OsinfoInstallConfigParam +{ + OsinfoEntity parent_instance; + /* public */ + + /* private */ + OsinfoInstallConfigParamPrivate *priv; +}; + +/* class */ +struct _OsinfoInstallConfigParamClass +{ + OsinfoEntityClass parent_class; + + /* class members */ +}; + +GType osinfo_install_config_param_get_type(void); + +OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name, const gchar *policy); + +const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param); + +OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param); + + +#endif /* __OSINFO_INSTALL_CONFIG_PARAM_H__ */ +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c index 2d0b440..2a1dfbb 100644 --- a/osinfo/osinfo_install_script.c +++ b/osinfo/osinfo_install_script.c @@ -47,6 +47,7 @@ G_DEFINE_TYPE (OsinfoInstallScript, osinfo_install_script, OSINFO_TYPE_ENTITY); struct _OsinfoInstallScriptPrivate { gchar *output_prefix; + GList *config_param_list; }; enum { @@ -137,12 +138,12 @@ osinfo_os_get_property(GObject *object, } - static void osinfo_install_script_finalize (GObject *object) { OsinfoInstallScript *script = OSINFO_INSTALL_SCRIPT (object); g_free(script->priv->output_prefix); + g_list_free_full(script->priv->config_param_list, g_object_unref); /* Chain up to the parent class */ G_OBJECT_CLASS (osinfo_install_script_parent_class)->finalize (object); @@ -216,6 +217,51 @@ osinfo_install_script_class_init (OsinfoInstallScriptClass *klass) g_type_class_add_private (klass, sizeof (OsinfoInstallScriptPrivate)); } +void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param) +{ + g_return_if_fail(OSINFO_IS_INSTALL_SCRIPT(script)); + g_return_if_fail(OSINFO_IS_INSTALL_CONFIG_PARAM(param)); + + script->priv->config_param_list = + g_list_prepend(script->priv->config_param_list, param); +} + +gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param) +{ + guint i, list_size = g_list_length(script->priv->config_param_list); + + for (i = 0; i < list_size; i++) + { + OsinfoInstallConfigParam *tmp; + tmp = g_list_nth_data(script->priv->config_param_list, i); + + if (g_strcmp0(osinfo_install_config_param_get_name(tmp), + osinfo_install_config_param_get_name(config_param)) == 0) + return TRUE; + } + return FALSE; +} + +gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *script, const gchar *name) +{ + guint i, list_size = g_list_length(script->priv->config_param_list); + + for (i = 0; i < list_size; i++) + { + OsinfoInstallConfigParam *tmp; + tmp = g_list_nth_data(script->priv->config_param_list, i); + + if (g_strcmp0(osinfo_install_config_param_get_name(tmp), name) == 0) + return TRUE; + } + return FALSE; +} + +GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script) +{ + return g_list_copy(script->priv->config_param_list); +} + static void osinfo_install_script_init (OsinfoInstallScript *list) { @@ -223,6 +269,7 @@ osinfo_install_script_init (OsinfoInstallScript *list) list->priv = priv = OSINFO_INSTALL_SCRIPT_GET_PRIVATE(list); list->priv->output_prefix = NULL; + list->priv->config_param_list = NULL; } diff --git a/osinfo/osinfo_install_script.h b/osinfo/osinfo_install_script.h index 440fd7e..21a50b3 100644 --- a/osinfo/osinfo_install_script.h +++ b/osinfo/osinfo_install_script.h @@ -23,6 +23,7 @@ #include <glib-object.h> #include <gio/gio.h> +#include <osinfo/osinfo_install_config_param.h> #ifndef __OSINFO_INSTALL_SCRIPT_H__ #define __OSINFO_INSTALL_SCRIPT_H__ @@ -50,7 +51,8 @@ typedef struct _OsinfoInstallScriptPrivate OsinfoInstallScriptPrivate; #define OSINFO_INSTALL_SCRIPT_PROP_PROFILE "profile" #define OSINFO_INSTALL_SCRIPT_PROP_PRODUCT_KEY_FORMAT "product-key-format" #define OSINFO_INSTALL_SCRIPT_PROP_OUTPUT_FILENAME "output-filename" - +#define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_REQUIRED "required" +#define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_OPTIONAL "optional" /* object */ struct _OsinfoInstallScript @@ -127,6 +129,14 @@ GFile *osinfo_install_script_generate_output(OsinfoInstallScript *script, GCancellable *cancellable, GError **error); +gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param); + +gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *script, const gchar *name); + +void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param); + +GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script); + #endif /* __OSINFO_INSTALL_SCRIPT_H__ */ /* * Local variables: diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c index 31e442e..76ac793 100644 --- a/osinfo/osinfo_loader.c +++ b/osinfo/osinfo_loader.c @@ -540,6 +540,35 @@ static void osinfo_loader_deployment(OsinfoLoader *loader, osinfo_db_add_deployment(loader->priv->db, deployment); } +static void osinfo_loader_install_config_param(OsinfoLoader *loader, + OsinfoEntity *entity, + const gchar *xpath, + xmlXPathContextPtr ctxt, + xmlNodePtr root, + GError **err) +{ + xmlNodePtr *nodes = NULL; + int nnodes = osinfo_loader_nodeset(xpath, ctxt, &nodes, err); + int i; + if (error_is_set(err)) + return; + + for (i = 0 ; i < nnodes ; i++) { + gchar *name = (gchar *)xmlGetProp(nodes[i], BAD_CAST "name"); + gchar *policy = (gchar *)xmlGetProp(nodes[i], BAD_CAST "policy"); + OsinfoInstallConfigParam *param = + osinfo_install_config_param_new(name, policy); + osinfo_install_script_add_config_param(OSINFO_INSTALL_SCRIPT(entity), + param); + + g_free(name); + g_free(policy); + }; + + g_free(nodes); +} + + static void osinfo_loader_install_script(OsinfoLoader *loader, xmlXPathContextPtr ctxt, @@ -594,6 +623,13 @@ static void osinfo_loader_install_script(OsinfoLoader *loader, value); g_free(value); + osinfo_loader_install_config_param(loader, + OSINFO_ENTITY(installScript), + "./config/*", + ctxt, + root, + err); + osinfo_db_add_install_script(loader->priv->db, installScript); return; -- 1.7.11.2