We need to know if validation flag is present in order to
validate given XML against schema in virInterfaceDefParseXML().
Signed-off-by: Kristina Hanicova <khanicov(a)redhat.com>
---
src/conf/interface_conf.c | 29 +++++++++++++++----------
src/conf/interface_conf.h | 6 +++--
src/conf/virinterfaceobj.c | 2 +-
src/interface/interface_backend_netcf.c | 4 ++--
src/test/test_driver.c | 4 ++--
tests/interfacexml2xmltest.c | 2 +-
6 files changed, 28 insertions(+), 19 deletions(-)
diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c
index d84ec66def..7b0cfa6562 100644
--- a/src/conf/interface_conf.c
+++ b/src/conf/interface_conf.c
@@ -38,7 +38,8 @@ VIR_ENUM_IMPL(virInterface,
);
static virInterfaceDef *
-virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType);
+virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType,
+ xmlDocPtr xml, unsigned int flags);
static int
virInterfaceDefDevFormat(virBuffer *buf, const virInterfaceDef *def,
@@ -521,7 +522,7 @@ virInterfaceDefParseBridge(virInterfaceDef *def,
for (i = 0; i < nbItf; i++) {
ctxt->node = interfaces[i];
- itf = virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_BRIDGE);
+ itf = virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_BRIDGE, NULL, 0);
if (itf == NULL) {
ret = -1;
def->data.bridge.nbItf = i;
@@ -565,7 +566,7 @@ virInterfaceDefParseBondItfs(virInterfaceDef *def,
for (i = 0; i < nbItf; i++) {
ctxt->node = interfaces[i];
- itf = virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_BOND);
+ itf = virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_BOND, NULL, 0);
if (itf == NULL) {
def->data.bond.nbItf = i;
goto cleanup;
@@ -677,7 +678,9 @@ virInterfaceDefParseVlan(virInterfaceDef *def,
static virInterfaceDef *
virInterfaceDefParseXML(xmlXPathContextPtr ctxt,
- int parentIfType)
+ int parentIfType,
+ xmlDocPtr xml G_GNUC_UNUSED,
+ unsigned int flags)
{
virInterfaceDef *def;
int type;
@@ -685,6 +688,7 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt,
VIR_XPATH_NODE_AUTORESTORE(ctxt)
xmlNodePtr lnk;
+ virCheckFlags(0, NULL);
/* check @type */
tmp = virXPathString("string(./@type)", ctxt);
@@ -797,7 +801,8 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt,
virInterfaceDef *
virInterfaceDefParseNode(xmlDocPtr xml,
- xmlNodePtr root)
+ xmlNodePtr root,
+ unsigned int flags)
{
g_autoptr(xmlXPathContext) ctxt = NULL;
@@ -813,19 +818,20 @@ virInterfaceDefParseNode(xmlDocPtr xml,
return NULL;
ctxt->node = root;
- return virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_LAST);
+ return virInterfaceDefParseXML(ctxt, VIR_INTERFACE_TYPE_LAST, xml, flags);
}
static virInterfaceDef *
virInterfaceDefParse(const char *xmlStr,
- const char *filename)
+ const char *filename,
+ unsigned int flags)
{
xmlDocPtr xml;
virInterfaceDef *def = NULL;
if ((xml = virXMLParse(filename, xmlStr, _("(interface_definition)")))) {
- def = virInterfaceDefParseNode(xml, xmlDocGetRootElement(xml));
+ def = virInterfaceDefParseNode(xml, xmlDocGetRootElement(xml), flags);
xmlFreeDoc(xml);
}
@@ -834,16 +840,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..15819b000f 100644
--- a/src/conf/interface_conf.h
+++ b/src/conf/interface_conf.h
@@ -155,14 +155,16 @@ void
virInterfaceDefFree(virInterfaceDef *def);
virInterfaceDef *
-virInterfaceDefParseString(const char *xmlStr);
+virInterfaceDefParseString(const char *xmlStr,
+ unsigned int flags);
virInterfaceDef *
virInterfaceDefParseFile(const char *filename);
virInterfaceDef *
virInterfaceDefParseNode(xmlDocPtr xml,
- xmlNodePtr root);
+ xmlNodePtr root,
+ unsigned int flags);
char *
virInterfaceDefFormat(const virInterfaceDef *def);
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 16d70d9025..149d1afdad 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -1113,7 +1113,7 @@ testParseInterfaces(testDriver *privconn,
if (!node)
return -1;
- def = virInterfaceDefParseNode(ctxt->doc, node);
+ def = virInterfaceDefParseNode(ctxt->doc, node, 0);
if (!def)
return -1;
@@ -6074,7 +6074,7 @@ testInterfaceDefineXML(virConnectPtr conn,
virCheckFlags(0, NULL);
virObjectLock(privconn);
- if ((def = virInterfaceDefParseString(xmlStr)) == NULL)
+ if ((def = virInterfaceDefParseString(xmlStr, flags)) == 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