[libvirt] [PATCH v2 10/11] Add support for schema validation when passing in XML
Jiri Denemark
jdenemar at redhat.com
Tue Jan 13 14:33:13 UTC 2015
On Thu, Jan 08, 2015 at 15:48:21 +0000, Daniel Berrange wrote:
> The virDomainDefineXMLFlags and virDomainCreateXML APIs both
> gain new flags allowing them to be told to validate XML.
> This updates all the drivers to turn on validation in the
> XML parser when the flags are set
...
> diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
> index a40956f..d0a5d0b 100644
> --- a/src/bhyve/bhyve_driver.c
> +++ b/src/bhyve/bhyve_driver.c
...
> @@ -890,9 +894,13 @@ bhyveDomainCreateXML(virConnectPtr conn,
> virObjectEventPtr event = NULL;
> virCapsPtr caps = NULL;
> unsigned int start_flags = 0;
> + unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
>
> - virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, NULL);
> + virCheckFlags(VIR_DOMAIN_START_AUTODESTROY |
> + VIR_DOMAIN_START_VALIDATE, NULL);
>
> + if (flags & VIR_DOMAIN_START_VALIDATE
s/$/)/
> + parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE;
> if (flags & VIR_DOMAIN_START_AUTODESTROY)
> start_flags |= VIR_BHYVE_PROCESS_START_AUTODESTROY;
>
...
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 4361834..6e06272 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -29,6 +29,7 @@
> #include <sys/stat.h>
> #include <unistd.h>
>
> +#include "configmake.h"
> #include "internal.h"
> #include "virerror.h"
> #include "datatypes.h"
> @@ -12646,6 +12647,11 @@ virDomainDefParseXML(xmlDocPtr xml,
> bool usb_master = false;
> bool primaryVideo = false;
>
> + if ((flags & VIR_DOMAIN_DEF_PARSE_VALIDATE) &&
> + virXMLValidateAgainstSchema(PKGDATADIR "/schemas/domain.rng",
> + xml) < 0)
This should be using virFileFindResource() so that it works even for
uninstalled libvirt.
> + return NULL;
> +
> if (VIR_ALLOC(def) < 0)
> return NULL;
>
...
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index e35986c..0fc64d9 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
...
> @@ -1888,12 +1892,16 @@ xenUnifiedDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int
> xenUnifiedPrivatePtr priv = conn->privateData;
> virDomainDefPtr def = NULL;
> virDomainPtr ret = NULL;
> + unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
>
> - virCheckFlags(0, NULL);
> + virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL);
> +
> + if (flags & VIR_DOMAIN_DEFINE_VALIDATE)
> + parse_flags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
s/VIR_DOMAIN_DEF_PARSE_INACTIVE/VIR_DOMAIN_DEF_PARSE_VALIDATE/
>
> if (!(def = virDomainDefParseString(xml, priv->caps, priv->xmlopt,
> 1 << VIR_DOMAIN_VIRT_XEN,
> - VIR_DOMAIN_DEF_PARSE_INACTIVE)))
> + parse_flags)))
> goto cleanup;
>
> if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
...
Jirka
More information about the libvir-list
mailing list