]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: virnetworkportdef: add validation against schema in network port create
authorKristina Hanicova <khanicov@redhat.com>
Thu, 26 Aug 2021 12:23:55 +0000 (14:23 +0200)
committerJán Tomko <jtomko@redhat.com>
Mon, 6 Sep 2021 15:08:59 +0000 (17:08 +0200)
We need to validate the XML against schema if option '--validate'
was passed to the virsh command. This patch also includes
propagation of flags into the virNetworkPortDefParse().

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/conf/virnetworkportdef.c
src/conf/virnetworkportdef.h
src/network/bridge_driver.c

index 612751311768655b2bb661f29a7375bca27dee1a..dbefc98ee80a55b7e350de2de27a74afbcadef6f 100644 (file)
@@ -30330,7 +30330,7 @@ virDomainNetCreatePort(virConnectPtr conn,
     VIR_FREE(portxml);
 
     if (!(portxml = virNetworkPortGetXMLDesc(port, 0)) ||
-        !(portdef = virNetworkPortDefParseString(portxml)) ||
+        !(portdef = virNetworkPortDefParseString(portxml, 0)) ||
         virDomainNetDefActualFromNetworkPort(iface, portdef) < 0) {
         virErrorPreserveLast(&save_err);
         virNetworkPortDelete(port, 0);
index c1749eebe022672d00c7261198e5bfbb29386270..1ca1eddb5aab0d2552a929b1ae18414dfb3bb417 100644 (file)
@@ -287,12 +287,15 @@ virNetworkPortDefParseNode(xmlDocPtr xml,
 
 static virNetworkPortDef *
 virNetworkPortDefParse(const char *xmlStr,
-                       const char *filename)
+                       const char *filename,
+                       unsigned int flags)
 {
     virNetworkPortDef *def = NULL;
     g_autoptr(xmlDoc) xml = NULL;
 
-    if ((xml = virXMLParse(filename, xmlStr, _("(networkport_definition)"), NULL, false))) {
+    if ((xml = virXMLParse(filename, xmlStr, _("(networkport_definition)"),
+                           "networkport.rng",
+                           flags & VIR_NETWORK_PORT_CREATE_VALIDATE))) {
         def = virNetworkPortDefParseNode(xml, xmlDocGetRootElement(xml));
     }
 
@@ -301,16 +304,17 @@ virNetworkPortDefParse(const char *xmlStr,
 
 
 virNetworkPortDef *
-virNetworkPortDefParseString(const char *xmlStr)
+virNetworkPortDefParseString(const char *xmlStr,
+                             unsigned int flags)
 {
-    return virNetworkPortDefParse(xmlStr, NULL);
+    return virNetworkPortDefParse(xmlStr, NULL, flags);
 }
 
 
 virNetworkPortDef *
 virNetworkPortDefParseFile(const char *filename)
 {
-    return virNetworkPortDefParse(NULL, filename);
+    return virNetworkPortDefParse(NULL, filename, 0);
 }
 
 
index 0ac232d16a33b42a56bce5250fe7d2a0b33024ce..5c7cd2953e590d7767c106aa7ac6ffae8e197448 100644 (file)
@@ -86,7 +86,8 @@ virNetworkPortDefParseNode(xmlDocPtr xml,
                            xmlNodePtr root);
 
 virNetworkPortDef *
-virNetworkPortDefParseString(const char *xml);
+virNetworkPortDefParseString(const char *xml,
+                             unsigned int flags);
 
 virNetworkPortDef *
 virNetworkPortDefParseFile(const char *filename);
index e8b9ffa1fcaefd5960a3850bf564c3f390ebfb86..7513ddad4868825cae9fe113675bc0c34f6977ff 100644 (file)
@@ -5287,7 +5287,7 @@ networkPortCreateXML(virNetworkPtr net,
 
     def = virNetworkObjGetDef(obj);
 
-    if (!(portdef = virNetworkPortDefParseString(xmldesc)))
+    if (!(portdef = virNetworkPortDefParseString(xmldesc, 0)))
         goto cleanup;
 
     if (virNetworkPortCreateXMLEnsureACL(net->conn, def, portdef) < 0)