]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
src & network_conf: add validation against schema in define
authorKristina Hanicova <khanicov@redhat.com>
Mon, 23 Aug 2021 16:50:12 +0000 (18:50 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 24 Aug 2021 13:46:54 +0000 (15:46 +0200)
This patch also includes propagation of flags into the
virNetworkDefParse().

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c
src/conf/network_conf.c
src/conf/network_conf.h
src/esx/esx_network_driver.c
src/network/bridge_driver.c
src/qemu/qemu_process.c
src/test/test_driver.c
src/vbox/vbox_network.c

index 10effdce697063440917ed405024361577390e61..0328447f8785b7905d75494181143992e94540b7 100644 (file)
@@ -30522,7 +30522,7 @@ virDomainNetResolveActualType(virDomainNetDef *iface)
     if (!(xml = virNetworkGetXMLDesc(net, 0)))
         goto cleanup;
 
-    if (!(def = virNetworkDefParseString(xml, NULL)))
+    if (!(def = virNetworkDefParseString(xml, NULL, 0)))
         goto cleanup;
 
     switch ((virNetworkForwardType) def->forward.type) {
index fbd939a1f1fb9881260311a6de3f4171f7e9e3b9..f23599abac9f1ee115c29d384f406d9fa6a95039 100644 (file)
@@ -318,7 +318,7 @@ virNetworkDefCopy(virNetworkDef *def,
     if (!(xml = virNetworkDefFormat(def, xmlopt, flags)))
        return NULL;
 
-    return virNetworkDefParseString(xml, xmlopt);
+    return virNetworkDefParseString(xml, xmlopt, 0);
 }
 
 
@@ -2085,13 +2085,15 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
 static virNetworkDef *
 virNetworkDefParse(const char *xmlStr,
                    const char *filename,
-                   virNetworkXMLOption *xmlopt)
+                   virNetworkXMLOption *xmlopt,
+                   unsigned int flags)
 {
     g_autoptr(xmlDoc) xml = NULL;
     virNetworkDef *def = NULL;
     int keepBlanksDefault = xmlKeepBlanksDefault(0);
 
-    if ((xml = virXMLParse(filename, xmlStr, _("(network_definition)"), NULL, false)))
+    if ((xml = virXMLParse(filename, xmlStr, _("(network_definition)"),
+                           "network.rng", flags & VIR_NETWORK_DEFINE_VALIDATE)))
         def = virNetworkDefParseNode(xml, xmlDocGetRootElement(xml), xmlopt);
 
     xmlKeepBlanksDefault(keepBlanksDefault);
@@ -2101,9 +2103,10 @@ virNetworkDefParse(const char *xmlStr,
 
 virNetworkDef *
 virNetworkDefParseString(const char *xmlStr,
-                         virNetworkXMLOption *xmlopt)
+                         virNetworkXMLOption *xmlopt,
+                         unsigned int flags)
 {
-    return virNetworkDefParse(xmlStr, NULL, xmlopt);
+    return virNetworkDefParse(xmlStr, NULL, xmlopt, flags);
 }
 
 
@@ -2111,7 +2114,7 @@ virNetworkDef *
 virNetworkDefParseFile(const char *filename,
                        virNetworkXMLOption *xmlopt)
 {
-    return virNetworkDefParse(NULL, filename, xmlopt);
+    return virNetworkDefParse(NULL, filename, xmlopt, 0);
 }
 
 
index 6199f3f5885820aaebffc6057b125d7c04b60504..34007e1969dff86d827a2e04ae19fac8945d8503 100644 (file)
@@ -327,7 +327,8 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
 
 virNetworkDef *
 virNetworkDefParseString(const char *xmlStr,
-                         virNetworkXMLOption *xmlopt);
+                         virNetworkXMLOption *xmlopt,
+                         unsigned int flags);
 
 virNetworkDef *
 virNetworkDefParseFile(const char *filename,
index 72b5a4f23591bc72307992e9b4d9a5d605657f84..8a0cfa37294a731c4e2415e71b04a537de4834d1 100644 (file)
@@ -298,7 +298,7 @@ esxNetworkDefineXMLFlags(virConnectPtr conn, const char *xml,
         return NULL;
 
     /* Parse network XML */
-    def = virNetworkDefParseString(xml, NULL);
+    def = virNetworkDefParseString(xml, NULL, 0);
 
     if (!def)
         return NULL;
index 0f27b1d1800eda6724f4975927a96fbe75d70d91..207163cde2ff2d62cd2cab64fb8b9112c095cd12 100644 (file)
@@ -3474,7 +3474,7 @@ networkCreateXML(virConnectPtr conn,
     virNetworkPtr net = NULL;
     virObjectEvent *event = NULL;
 
-    if (!(newDef = virNetworkDefParseString(xml, network_driver->xmlopt)))
+    if (!(newDef = virNetworkDefParseString(xml, network_driver->xmlopt, 0)))
         goto cleanup;
 
     if (virNetworkCreateXMLEnsureACL(conn, newDef) < 0)
@@ -3529,7 +3529,7 @@ networkDefineXMLFlags(virConnectPtr conn,
 
     virCheckFlags(0, NULL);
 
-    if (!(def = virNetworkDefParseString(xml, network_driver->xmlopt)))
+    if (!(def = virNetworkDefParseString(xml, network_driver->xmlopt, 0)))
         goto cleanup;
 
     if (virNetworkDefineXMLFlagsEnsureACL(conn, def) < 0)
index 77da9992f4e382e650f29261f2c6ebeaa9d61b83..df3bd66c0cda577f4dfb4a21e483872eeacf6c2a 100644 (file)
@@ -4784,7 +4784,7 @@ qemuProcessGetNetworkAddress(const char *netname,
     if (!xml)
         goto cleanup;
 
-    netdef = virNetworkDefParseString(xml, NULL);
+    netdef = virNetworkDefParseString(xml, NULL, 0);
     if (!netdef)
         goto cleanup;
 
index d9203c9568ce7700e1fe992ab7e20925657baacd..117d1e6ba9ceaf67a1b07d92dc0f207d57d9b95b 100644 (file)
@@ -5581,7 +5581,7 @@ testNetworkCreateXML(virConnectPtr conn, const char *xml)
     virNetworkPtr net = NULL;
     virObjectEvent *event = NULL;
 
-    if ((newDef = virNetworkDefParseString(xml, NULL)) == NULL)
+    if ((newDef = virNetworkDefParseString(xml, NULL, 0)) == NULL)
         goto cleanup;
 
     if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef,
@@ -5620,7 +5620,7 @@ testNetworkDefineXMLFlags(virConnectPtr conn,
 
     virCheckFlags(0, NULL);
 
-    if ((newDef = virNetworkDefParseString(xml, NULL)) == NULL)
+    if ((newDef = virNetworkDefParseString(xml, NULL, 0)) == NULL)
         goto cleanup;
 
     if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef, 0)))
index cce43ee5afe1be260792705bad4105726868ba08..804f9f0b01aae7f164653184832621b9d1d15bb8 100644 (file)
@@ -397,7 +397,7 @@ vboxNetworkDefineCreateXML(virConnectPtr conn, const char *xml, bool start,
 
     VBOX_IID_INITIALIZE(&vboxnetiid);
 
-    if (!(def = virNetworkDefParseString(xml, NULL)) ||
+    if (!(def = virNetworkDefParseString(xml, NULL, 0)) ||
         (def->forward.type != VIR_NETWORK_FORWARD_NONE) ||
         (def->nips == 0 || !def->ips))
         goto cleanup;