[PATCH 2/4] conf: add validation and propagate flags into virInterfaceDefParse()

Kristina Hanicova khanicov at redhat.com
Fri Aug 20 11:28:50 UTC 2021


We need to know if validation flag is present in order to
validate given XML against schema in virXMLParse().

Signed-off-by: Kristina Hanicova <khanicov at redhat.com>
---
 src/conf/interface_conf.c               | 14 ++++++++------
 src/conf/interface_conf.h               |  3 ++-
 src/conf/virinterfaceobj.c              |  2 +-
 src/interface/interface_backend_netcf.c |  4 ++--
 src/test/test_driver.c                  |  2 +-
 tests/interfacexml2xmltest.c            |  2 +-
 6 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c
index c371a252a8..464ff26856 100644
--- a/src/conf/interface_conf.c
+++ b/src/conf/interface_conf.c
@@ -685,7 +685,6 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt,
     VIR_XPATH_NODE_AUTORESTORE(ctxt)
     xmlNodePtr lnk;
 
-
     /* check @type */
     tmp = virXPathString("string(./@type)", ctxt);
     if (tmp == NULL) {
@@ -819,12 +818,14 @@ virInterfaceDefParseNode(xmlDocPtr xml,
 
 static virInterfaceDef *
 virInterfaceDefParse(const char *xmlStr,
-                     const char *filename)
+                     const char *filename,
+                     unsigned int flags)
 {
     g_autoptr(xmlDoc) xml = NULL;
     virInterfaceDef *def = NULL;
 
-    if ((xml = virXMLParse(filename, xmlStr, _("(interface_definition)"), NULL, false))) {
+    if ((xml = virXMLParse(filename, xmlStr, _("(interface_definition)"), "interface.rng",
+                           flags & VIR_INTERFACE_DEFINE_VALIDATE))) {
         def = virInterfaceDefParseNode(xml, xmlDocGetRootElement(xml));
     }
 
@@ -833,16 +834,17 @@ virInterfaceDefParse(const char *xmlStr,
 
 
 virInterfaceDef *
-virInterfaceDefParseString(const char *xmlStr)
+virInterfaceDefParseString(const char *xmlStr,
+                           unsigned int flags)
 {
-    return virInterfaceDefParse(xmlStr, NULL);
+    return virInterfaceDefParse(xmlStr, NULL, flags);
 }
 
 
 virInterfaceDef *
 virInterfaceDefParseFile(const char *filename)
 {
-    return virInterfaceDefParse(NULL, filename);
+    return virInterfaceDefParse(NULL, filename, 0);
 }
 
 
diff --git a/src/conf/interface_conf.h b/src/conf/interface_conf.h
index f5e802736b..ea92e0fb31 100644
--- a/src/conf/interface_conf.h
+++ b/src/conf/interface_conf.h
@@ -155,7 +155,8 @@ void
 virInterfaceDefFree(virInterfaceDef *def);
 
 virInterfaceDef *
-virInterfaceDefParseString(const char *xmlStr);
+virInterfaceDefParseString(const char *xmlStr,
+                           unsigned int flags);
 
 virInterfaceDef *
 virInterfaceDefParseFile(const char *filename);
diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c
index a73208f1fc..9439bb3d0b 100644
--- a/src/conf/virinterfaceobj.c
+++ b/src/conf/virinterfaceobj.c
@@ -373,7 +373,7 @@ virInterfaceObjListCloneCb(void *payload,
     if (!(xml = virInterfaceDefFormat(srcObj->def)))
         goto error;
 
-    if (!(backup = virInterfaceDefParseString(xml)))
+    if (!(backup = virInterfaceDefParseString(xml, 0)))
         goto error;
     VIR_FREE(xml);
 
diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c
index 416e0af36f..9f93cdd657 100644
--- a/src/interface/interface_backend_netcf.c
+++ b/src/interface/interface_backend_netcf.c
@@ -862,7 +862,7 @@ static char *netcfInterfaceGetXMLDesc(virInterfacePtr ifinfo,
         goto cleanup;
     }
 
-    ifacedef = virInterfaceDefParseString(xmlstr);
+    ifacedef = virInterfaceDefParseString(xmlstr, 0);
     if (!ifacedef) {
         /* error was already reported */
         goto cleanup;
@@ -898,7 +898,7 @@ static virInterfacePtr netcfInterfaceDefineXML(virConnectPtr conn,
 
     virObjectLock(driver);
 
-    ifacedef = virInterfaceDefParseString(xml);
+    ifacedef = virInterfaceDefParseString(xml, 0);
     if (!ifacedef) {
         /* error was already reported */
         goto cleanup;
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 10a1767542..450510ee54 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -6159,7 +6159,7 @@ testInterfaceDefineXML(virConnectPtr conn,
     virCheckFlags(0, NULL);
 
     virObjectLock(privconn);
-    if ((def = virInterfaceDefParseString(xmlStr)) == NULL)
+    if ((def = virInterfaceDefParseString(xmlStr, 0)) == NULL)
         goto cleanup;
 
     if ((obj = virInterfaceObjListAssignDef(privconn->ifaces, def)) == NULL)
diff --git a/tests/interfacexml2xmltest.c b/tests/interfacexml2xmltest.c
index 07d179e3a3..3785467f84 100644
--- a/tests/interfacexml2xmltest.c
+++ b/tests/interfacexml2xmltest.c
@@ -24,7 +24,7 @@ testCompareXMLToXMLFiles(const char *xml)
     if (virTestLoadFile(xml, &xmlData) < 0)
         goto fail;
 
-    if (!(dev = virInterfaceDefParseString(xmlData)))
+    if (!(dev = virInterfaceDefParseString(xmlData, 0)))
         goto fail;
 
     if (!(actual = virInterfaceDefFormat(dev)))
-- 
2.31.1




More information about the libvir-list mailing list