]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: clean up virDomainNetIPParseXML()
authorLaine Stump <laine@laine.org>
Tue, 26 Apr 2016 16:18:53 +0000 (12:18 -0400)
committerLaine Stump <laine@laine.org>
Sun, 26 Jun 2016 23:33:07 +0000 (19:33 -0400)
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

index 7d0396f3103f474f970726fead3bee91539d260c..87e14839cbdc764a58203dd65993a267e4733484 100644 (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;