From: Laine Stump Date: Tue, 26 Apr 2016 16:18:53 +0000 (-0400) Subject: conf: clean up virDomainNetIPParseXML() X-Git-Tag: v2.0.0-rc2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfd2de6eeda30264e3847fa1c21856aa448f8439;p=thirdparty%2Flibvirt.git 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. --- 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;