]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
snapshot: Add internal option to validate XML against schema
authorEric Blake <eblake@redhat.com>
Sat, 6 Jul 2019 03:02:03 +0000 (22:02 -0500)
committerEric Blake <eblake@redhat.com>
Wed, 10 Jul 2019 22:13:26 +0000 (17:13 -0500)
Similar to VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA; the next patch will
put it to use with a counterpart public API flag.

No need to change qemudomainsnapshotxml2xmltest to use the flag, since
the testsuite already has a separate virschematest that does the same.

Signed-off-by: Eric Blake <eblake@redhat.com>
Acked-by: Peter Krempa <pkrempa@redhat.com>
src/conf/snapshot_conf.c
src/conf/snapshot_conf.h

index c7f29360e748d889f1ccf09c04a04185bd73b702..ea04413aec1befe1924674dba7c5bbca30aa7cdb 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include "configmake.h"
 #include "internal.h"
 #include "virbitmap.h"
 #include "virbuffer.h"
@@ -409,6 +410,18 @@ virDomainSnapshotDefParseNode(xmlDocPtr xml,
         goto cleanup;
     }
 
+    if (flags & VIR_DOMAIN_SNAPSHOT_PARSE_VALIDATE) {
+        VIR_AUTOFREE(char *) schema = NULL;
+
+        schema = virFileFindResource("domainsnapshot.rng",
+                                     abs_top_srcdir "/docs/schemas",
+                                     PKGDATADIR "/schemas");
+        if (!schema)
+            goto cleanup;
+        if (virXMLValidateAgainstSchema(schema, xml) < 0)
+            goto cleanup;
+    }
+
     ctxt = xmlXPathNewContext(xml);
     if (ctxt == NULL) {
         virReportOOMError();
index 08b2a3b955799523965b7075e2f6f164e8123d23..a0c87e7ade2ea875cefa252da54a5c28b85c0c76 100644 (file)
@@ -92,6 +92,7 @@ typedef enum {
     VIR_DOMAIN_SNAPSHOT_PARSE_DISKS    = 1 << 1,
     VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL = 1 << 2,
     VIR_DOMAIN_SNAPSHOT_PARSE_OFFLINE  = 1 << 3,
+    VIR_DOMAIN_SNAPSHOT_PARSE_VALIDATE = 1 << 4,
 } virDomainSnapshotParseFlags;
 
 typedef enum {