conf: virnetworkportdef: add validation against schema in network port create

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>
This commit is contained in:
Kristina Hanicova 2021-08-26 14:23:55 +02:00 committed by Ján Tomko
parent c499b09e91
commit c2652059d6
4 changed files with 13 additions and 8 deletions

View File

@ -30330,7 +30330,7 @@ virDomainNetCreatePort(virConnectPtr conn,
VIR_FREE(portxml); VIR_FREE(portxml);
if (!(portxml = virNetworkPortGetXMLDesc(port, 0)) || if (!(portxml = virNetworkPortGetXMLDesc(port, 0)) ||
!(portdef = virNetworkPortDefParseString(portxml)) || !(portdef = virNetworkPortDefParseString(portxml, 0)) ||
virDomainNetDefActualFromNetworkPort(iface, portdef) < 0) { virDomainNetDefActualFromNetworkPort(iface, portdef) < 0) {
virErrorPreserveLast(&save_err); virErrorPreserveLast(&save_err);
virNetworkPortDelete(port, 0); virNetworkPortDelete(port, 0);

View File

@ -287,12 +287,15 @@ virNetworkPortDefParseNode(xmlDocPtr xml,
static virNetworkPortDef * static virNetworkPortDef *
virNetworkPortDefParse(const char *xmlStr, virNetworkPortDefParse(const char *xmlStr,
const char *filename) const char *filename,
unsigned int flags)
{ {
virNetworkPortDef *def = NULL; virNetworkPortDef *def = NULL;
g_autoptr(xmlDoc) xml = 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)); def = virNetworkPortDefParseNode(xml, xmlDocGetRootElement(xml));
} }
@ -301,16 +304,17 @@ virNetworkPortDefParse(const char *xmlStr,
virNetworkPortDef * virNetworkPortDef *
virNetworkPortDefParseString(const char *xmlStr) virNetworkPortDefParseString(const char *xmlStr,
unsigned int flags)
{ {
return virNetworkPortDefParse(xmlStr, NULL); return virNetworkPortDefParse(xmlStr, NULL, flags);
} }
virNetworkPortDef * virNetworkPortDef *
virNetworkPortDefParseFile(const char *filename) virNetworkPortDefParseFile(const char *filename)
{ {
return virNetworkPortDefParse(NULL, filename); return virNetworkPortDefParse(NULL, filename, 0);
} }

View File

@ -86,7 +86,8 @@ virNetworkPortDefParseNode(xmlDocPtr xml,
xmlNodePtr root); xmlNodePtr root);
virNetworkPortDef * virNetworkPortDef *
virNetworkPortDefParseString(const char *xml); virNetworkPortDefParseString(const char *xml,
unsigned int flags);
virNetworkPortDef * virNetworkPortDef *
virNetworkPortDefParseFile(const char *filename); virNetworkPortDefParseFile(const char *filename);

View File

@ -5287,7 +5287,7 @@ networkPortCreateXML(virNetworkPtr net,
def = virNetworkObjGetDef(obj); def = virNetworkObjGetDef(obj);
if (!(portdef = virNetworkPortDefParseString(xmldesc))) if (!(portdef = virNetworkPortDefParseString(xmldesc, 0)))
goto cleanup; goto cleanup;
if (virNetworkPortCreateXMLEnsureACL(net->conn, def, portdef) < 0) if (virNetworkPortCreateXMLEnsureACL(net->conn, def, portdef) < 0)