From bfd2de6eeda30264e3847fa1c21856aa448f8439 Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Tue, 26 Apr 2016 12:18:53 -0400 Subject: [PATCH] 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. --- src/conf/domain_conf.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7d0396f310..87e14839cb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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 ")); 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 "), 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 "), + prefixStr); + goto cleanup; + } ip->prefix = prefixValue; ret = ip;