CLOUDSTACK-5826: do netmask/gateway validation before calculating the POD cidr

Conflicts:
	server/src/com/cloud/configuration/ConfigurationManagerImpl.java
	utils/src/com/cloud/utils/net/NetUtils.java
This commit is contained in:
Alena Prokharchyk 2014-01-07 15:01:04 -08:00
parent 5e615f74b6
commit 418f8cb60e
2 changed files with 31 additions and 7 deletions

View File

@ -1207,6 +1207,16 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
public Pod createPod(long zoneId, String name, String startIp, String endIp, String gateway, String netmask,
String allocationState) {
// Check if the gateway is a valid IP address
if (!NetUtils.isValidIp(gateway)) {
throw new InvalidParameterValueException("The gateway is invalid");
}
if (!NetUtils.isValidNetmask(netmask)) {
throw new InvalidParameterValueException("The netmask is invalid");
}
String cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask);
Long userId = UserContext.current().getCallerUserId();

View File

@ -26,21 +26,27 @@ import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.URI;
import java.net.UnknownHostException;
import java.util.*;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.SortedSet;
import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.net.util.SubnetUtils;
import org.apache.log4j.Logger;
import com.googlecode.ipv6.IPv6Address;
import com.googlecode.ipv6.IPv6AddressRange;
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;
import org.apache.commons.lang.SystemUtils;
import com.googlecode.ipv6.IPv6Address;
import com.googlecode.ipv6.IPv6AddressRange;
import com.googlecode.ipv6.IPv6Network;
public class NetUtils {
protected final static Logger s_logger = Logger.getLogger(NetUtils.class);
@ -763,6 +769,14 @@ public class NetUtils {
}
public static String ipAndNetMaskToCidr(String ip, String netmask) {
if (!isValidIp(ip)) {
return null;
}
if (!isValidNetmask(netmask)) {
return null;
}
long ipAddr = ip2Long(ip);
long subnet = ip2Long(netmask);
long result = ipAddr & subnet;