1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-01-12 13:17:58 +03:00

conf: clean up virDomainNetIPParseXML()

Rearrange this function to be better organized and more correct:

* the error codes were changed from the incorrect INVALID_ARG to
  XML_ERROR

* prefix still isn't required, but if present it must be valid or an
  error will be logged.

* don't emit a debug log just because prefix is missing - this
  is valid.

* group everything related to setting prefix in one place rather than
  scattered through the function.
This commit is contained in:
Laine Stump 2016-04-26 12:18:53 -04:00
parent 22a6873a98
commit bfd2de6eed

View File

@ -6130,15 +6130,9 @@ virDomainNetIPParseXML(xmlNodePtr node)
int family = AF_UNSPEC;
char *address = NULL;
if (!(prefixStr = virXMLPropString(node, "prefix")) ||
(virStrToLong_ui(prefixStr, NULL, 10, &prefixValue) < 0)) {
// Don't shout, as some old config may not have a prefix
VIR_DEBUG("Missing or invalid network prefix");
}
if (!(address = virXMLPropString(node, "address"))) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Missing network address"));
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing required address in <ip>"));
goto cleanup;
}
@ -6154,11 +6148,22 @@ virDomainNetIPParseXML(xmlNodePtr node)
goto cleanup;
if (virSocketAddrParse(&ip->address, address, family) < 0) {
virReportError(VIR_ERR_INVALID_ARG,
_("Failed to parse IP address: '%s'"),
virReportError(VIR_ERR_XML_ERROR,
_("Invalid address '%s' in <ip>"),
address);
goto cleanup;
}
prefixStr = virXMLPropString(node, "prefix");
if (prefixStr &&
((virStrToLong_ui(prefixStr, NULL, 10, &prefixValue) < 0) ||
(family == AF_INET6 && prefixValue > 128) ||
(family == AF_INET && prefixValue > 32))) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid prefix value '%s' in <ip>"),
prefixStr);
goto cleanup;
}
ip->prefix = prefixValue;
ret = ip;