CLOUDSTACK-4811:Fixed zone creation wizard is allowing to accept wrong sub net mask which is cauing wrong cidr value for a given ip range

Signed-off-by: Jayapal <jayapal@apache.org>
This commit is contained in:
Damodar Reddy 2013-10-18 15:09:21 +05:30 committed by Jayapal
parent aaa99cd9de
commit a92095a4a6
3 changed files with 23 additions and 1 deletions

View File

@ -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)

5
utils/pom.xml Normal file → Executable file
View File

@ -112,6 +112,11 @@
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -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);
}
}