This proof of concept patch extends the virDomainDefineXML
and virDomainCreateXML APIs so that they can validate
the user supplied XML document against the RNG schemas.
The virsh command will enable validation by default, it
must be turned off with --skip-validation if desired.
This series is not complete
- The network, interface, storage pool, etc APIs are
not wired up to support validation.
- Only the QEMU virt driver is wired up to validate
- The virsh edit command is not wired up to validate
It is enough to demonstrate it working with 'virsh define'
and the QEMU driver though.
The biggest problem I see is the really awful error
messages we get back from libxml2 when validation
fails :-( They are essentially useless :-(
Daniel P. Berrange (8):
Add new virDomainDefineXMLFlags public API
Add stub virDomainDefineXMLFlags impls
Add virXMLValidateAgainstSchema helper method
Fix use of flags when parsing/formatting snapshot domain XML
Don't pass VIR_DOMAIN_XML_SECURE to virDomainDefParseString in phyp
Fix flags passed to virDomainDefParseString by XenAPI driver
Given virDomainDef parser & formatter their own flags
Add support for schema validation when passing in XML
include/libvirt/libvirt-domain.h | 9 ++
include/libvirt/virterror.h | 1 +
src/bhyve/bhyve_driver.c | 21 ++-
src/conf/domain_conf.c | 315 +++++++++++++++++++-------------------
src/conf/domain_conf.h | 71 ++++++---
src/conf/snapshot_conf.c | 8 +-
src/driver-hypervisor.h | 5 +
src/esx/esx_driver.c | 23 ++-
src/hyperv/hyperv_driver.c | 3 +-
src/internal.h | 4 +
src/libvirt-domain.c | 48 ++++++
src/libvirt_private.syms | 2 +
src/libvirt_public.syms | 5 +
src/libxl/libxl_domain.c | 2 +-
src/libxl/libxl_driver.c | 35 +++--
src/libxl/libxl_migration.c | 6 +-
src/lxc/lxc_driver.c | 25 ++-
src/openvz/openvz_driver.c | 23 ++-
src/parallels/parallels_driver.c | 11 +-
src/phyp/phyp_driver.c | 7 +-
src/qemu/qemu_domain.c | 10 +-
src/qemu/qemu_driver.c | 48 ++++--
src/qemu/qemu_migration.c | 8 +-
src/remote/remote_driver.c | 1 +
src/remote/remote_protocol.x | 19 ++-
src/remote_protocol-structs | 8 +
src/test/test_driver.c | 31 ++--
src/uml/uml_driver.c | 22 ++-
src/util/virerror.c | 6 +
src/util/virxml.c | 74 +++++++++
src/util/virxml.h | 5 +
src/vbox/vbox_common.c | 25 ++-
src/vmware/vmware_driver.c | 19 ++-
src/xen/xen_driver.c | 21 ++-
src/xen/xend_internal.c | 6 +-
src/xen/xm_internal.c | 4 +-
src/xenapi/xenapi_driver.c | 15 +-
tests/domainsnapshotxml2xmltest.c | 2 +-
tests/lxcxml2xmltest.c | 4 +-
tests/openvzutilstest.c | 2 +-
tests/qemuhotplugtest.c | 6 +-
tests/qemuxml2argvtest.c | 2 +-
tests/qemuxml2xmltest.c | 9 +-
tests/qemuxmlnstest.c | 2 +-
tests/vmx2xmltest.c | 2 +-
tests/xmconfigtest.c | 4 +-
tests/xml2sexprtest.c | 2 +-
tests/xml2vmxtest.c | 2 +-
tools/virsh-domain.c | 19 ++-
49 files changed, 684 insertions(+), 318 deletions(-)
--
2.1.0