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

This commit is contained in:
Alena Prokharchyk 2014-01-07 15:01:04 -08:00
parent f0ad14e235
commit 6fd030cbf2
2 changed files with 22 additions and 6 deletions

View File

@ -36,8 +36,6 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.affinity.AffinityGroup;
import org.apache.cloudstack.affinity.AffinityGroupService;
@ -85,6 +83,7 @@ import org.apache.cloudstack.region.dao.RegionDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.log4j.Logger;
import com.cloud.alert.AlertManager;
import com.cloud.api.ApiDBUtils;
@ -1228,6 +1227,16 @@ ConfigurationManagerImpl extends ManagerBase implements ConfigurationManager, Co
@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 = CallContext.current().getCallingUserId();

View File

@ -41,13 +41,12 @@ 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 com.cloud.utils.script.Script;
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);
@ -770,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;