diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index b4429cbc380..a0be496b624 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2890,7 +2890,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati } // Make sure the netmask is valid - if (!NetUtils.isValidIp(vlanNetmask)) { + if (!NetUtils.isValidNetmask(vlanNetmask)) { throw new InvalidParameterValueException("Please specify a valid netmask"); } } @@ -2907,6 +2907,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati if (ipv4) { String newCidr = NetUtils.getCidrFromGatewayAndNetmask(vlanGateway, vlanNetmask); + //Make sure start and end ips are with in the range of cidr calculated for this gateway and netmask { + if(!NetUtils.isIpWithtInCidrRange(vlanGateway, newCidr) || !NetUtils.isIpWithtInCidrRange(startIP, newCidr) || !NetUtils.isIpWithtInCidrRange(endIP, newCidr)) { + throw new InvalidParameterValueException("Please specify a valid IP range or valid netmask or valid gateway"); + } + // Check if the new VLAN's subnet conflicts with the guest network // in // the specified zone (guestCidr is null for basic zone) diff --git a/utils/pom.xml b/utils/pom.xml old mode 100644 new mode 100755 index 35012b23343..ec668390374 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -112,6 +112,11 @@ org.owasp.esapi esapi + + commons-net + commons-net + 3.3 + diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java index e64af4c7e3d..f5904250bb4 100755 --- a/utils/src/com/cloud/utils/net/NetUtils.java +++ b/utils/src/com/cloud/utils/net/NetUtils.java @@ -46,6 +46,7 @@ import com.googlecode.ipv6.IPv6Network; import com.cloud.utils.IteratorUtil; import com.cloud.utils.Pair; +import org.apache.commons.net.util.SubnetUtils; import com.cloud.utils.script.Script; public class NetUtils { @@ -1420,4 +1421,15 @@ public class NetUtils { mac = mac & 0x06FFFFFFFFFFl; return long2Mac(mac); } + + public static boolean isIpWithtInCidrRange(String ipAddress, String cidr) { + if (!isValidIp(ipAddress)) { + return false; + } + if (!isValidCIDR(cidr)) { + return false; + } + SubnetUtils subnetUtils = new SubnetUtils(cidr); + return subnetUtils.getInfo().isInRange(ipAddress); + } }