Skip to content

Commit dbac5e7

Browse files
committed
Merge branch 'allow_privateips_on_Console_Proxy' of https://github.com/scclouds/cloudstack into allow_privateips_on_Console_Proxy
2 parents 63027b7 + 518539b commit dbac5e7

File tree

1 file changed

+60
-111
lines changed

1 file changed

+60
-111
lines changed

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 60 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,7 +1171,7 @@ private String validateConfigurationValue(final String name, String value, final
11711171
if (type.equals(Integer.class) && NetworkModel.MACIdentifier.key().equalsIgnoreCase(name)) {
11721172
try {
11731173
final int val = Integer.parseInt(value);
1174-
//The value need to be between 0 to 255 because the mac generation needs a value of 8 bit
1174+
//The value needs to be between 0 to 255 because the mac generation needs a value of 8 bit
11751175
//0 value is considered as disable.
11761176
if(val < 0 || val > 255){
11771177
throw new InvalidParameterValueException(name+" value should be between 0 and 255. 0 value will disable this feature");
@@ -1222,7 +1222,7 @@ private String validateConfigurationValue(final String name, String value, final
12221222
}
12231223
}
12241224

1225-
if (configuration == null ) {
1225+
if(c == null ) {
12261226
//range validation has to be done per case basis, for now
12271227
//return in case of Configkey parameters
12281228
return null;
@@ -1234,121 +1234,70 @@ private String validateConfigurationValue(final String name, String value, final
12341234
}
12351235

12361236
if (type.equals(String.class)) {
1237-
return validateIfStringValueIsInRange(name, value, range);
1238-
} else if (type.equals(Integer.class)) {
1239-
return validateIfIntValueIsInRange(name, value, range[0]);
1240-
}
1241-
return String.format("Invalid value for configuration [%s].", name);
1242-
}
1243-
1244-
protected String validateIfIntValueIsInRange(String name, String value, String range) {
1245-
final String[] options = range.split("-");
1246-
if (options.length != 2) {
1247-
String msg = String.format("Configuration range [%s] for [%s] is invalid.", range, name);
1248-
s_logger.error(msg);
1249-
return msg;
1250-
}
1251-
final int min = Integer.parseInt(options[0]);
1252-
final int max = Integer.parseInt(options[1]);
1253-
final int val = Integer.parseInt(value);
1254-
if (val < min || val > max) {
1255-
s_logger.error(String.format("Invalid value for configuration [%s]. Please enter a value in the range [%s].", name, range));
1256-
return String.format("The provided value is not valid for this configuration. Please enter an integer in the range: [%s]", range);
1257-
}
1258-
return null;
1259-
}
1260-
1261-
1262-
private String validateIfStringValueIsInRange(String name, String value, String... range) {
1263-
List<String> message = new ArrayList<String>();
1264-
String errMessage = "";
1265-
for (String rangeOption : range) {
1266-
switch (rangeOption) {
1267-
case "privateip":
1268-
errMessage = validateRangePrivateIp(name, value);
1269-
break;
1270-
case "hypervisorList":
1271-
errMessage = validateRangeHypervisorList(value);
1272-
break;
1273-
case "instanceName":
1274-
errMessage = validateRangeInstanceName(value);
1275-
break;
1276-
case "domainName":
1277-
errMessage = validateRangeDomainName(value);
1278-
break;
1279-
default:
1280-
errMessage = validateRangeOther(name, value, rangeOption);
1281-
}
1282-
if (StringUtils.isEmpty(errMessage)) {
1283-
return null;
1284-
}
1285-
message.add(errMessage);
1286-
}
1287-
if (message.size() == 1) {
1288-
return String.format("The provided value is not %s.", message.get(0));
1289-
}
1290-
return String.format("The provided value is neither %s.", String.join(" NOR ", message));
1291-
}
1292-
1293-
protected String validateRangePrivateIp(String name, String value) {
1294-
try {
1295-
if (NetUtils.isSiteLocalAddress(value)) {
1296-
return null;
1297-
}
1298-
s_logger.error(String.format("Value [%s] is not a valid private IP range for configuration [%s].", value, name));
1299-
} catch (final NullPointerException e) {
1300-
s_logger.error(String.format("Error while parsing IP address for [%s].", name));
1301-
}
1302-
return "a valid site local IP address";
1303-
}
1237+
if (range.equals("privateip")) {
1238+
try {
1239+
if (!NetUtils.isSiteLocalAddress(value)) {
1240+
s_logger.error("privateip range " + value + " is not a site local address for configuration variable " + name);
1241+
return "Please enter a site local IP address.";
1242+
}
1243+
} catch (final NullPointerException e) {
1244+
s_logger.error("Error parsing ip address for " + name);
1245+
throw new InvalidParameterValueException("Error parsing ip address");
1246+
}
1247+
} else if (range.equals("netmask")) {
1248+
if (!NetUtils.isValidIp4Netmask(value)) {
1249+
s_logger.error("netmask " + value + " is not a valid net mask for configuration variable " + name);
1250+
return "Please enter a valid netmask.";
1251+
}
1252+
} else if (range.equals("hypervisorList")) {
1253+
final String[] hypervisors = value.split(",");
1254+
if (hypervisors == null) {
1255+
return "Please enter hypervisor list, separated by comma";
1256+
}
1257+
for (final String hypervisor : hypervisors) {
1258+
if (HypervisorType.getType(hypervisor) == HypervisorType.Any || HypervisorType.getType(hypervisor) == HypervisorType.None) {
1259+
return "Please enter a valid hypervisor type";
1260+
}
1261+
}
1262+
} else if (range.equalsIgnoreCase("instanceName")) {
1263+
if (!NetUtils.verifyInstanceName(value)) {
1264+
return "Instance name can not contain hyphen, space or plus sign";
1265+
}
1266+
} else if (range.equalsIgnoreCase("domainName")) {
1267+
String domainName = value;
1268+
if (value.startsWith("*")) {
1269+
domainName = value.substring(2); //skip the "*."
1270+
}
1271+
//max length for FQDN is 253 + 2, code adds xxx-xxx-xxx-xxx to domain name when creating URL
1272+
if (domainName.length() >= 238 || !domainName.matches(DOMAIN_NAME_PATTERN)) {
1273+
return "Please enter a valid string for domain name, prefixed with '*.' if applicable";
1274+
}
1275+
} else if (range.equals("routes")) {
1276+
final String[] routes = value.split(",");
1277+
for (final String route : routes) {
1278+
if (route != null) {
1279+
final String routeToVerify = route.trim();
1280+
if (!NetUtils.isValidIp4Cidr(routeToVerify)) {
1281+
throw new InvalidParameterValueException("Invalid value for route: " + route + " in deny list. Valid format is list"
1282+
+ " of cidrs separated by coma. Example: 10.1.1.0/24,192.168.0.0/24");
1283+
}
1284+
}
1285+
}
1286+
} else {
1287+
final String[] options = range.split(",");
1288+
for (final String option : options) {
1289+
if (option.trim().equalsIgnoreCase(value)) {
1290+
return null;
1291+
}
1292+
}
1293+
s_logger.error("configuration value for " + name + " is invalid");
1294+
return "Please enter : " + range;
13041295

1305-
/**
1306-
* Valid values are XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Simulator, Ovm, Ovm3, LXC
1307-
* Inputting "Any" will return the hypervisor type Any, other inputs will result in the hypervisor type none. Both of these are invalid values and will return an error message.
1308-
*/
1309-
protected String validateRangeHypervisorList(String value) {
1310-
final String[] hypervisors = value.split(",");
1311-
for (final String hypervisor : hypervisors) {
1312-
if (HypervisorType.getType(hypervisor) == HypervisorType.Any || HypervisorType.getType(hypervisor) == HypervisorType.None) {
1313-
return "a valid hypervisor type";
13141296
}
13151297
}
13161298
return null;
13171299
}
13181300

1319-
protected String validateRangeInstanceName(String value) {
1320-
if (NetUtils.verifyInstanceName(value)) {
1321-
return null;
1322-
}
1323-
return "a valid instance name (instance names cannot contain hyphen, space or plus sign)";
1324-
}
1325-
1326-
/**
1327-
* max length for FQDN is 253 + 2, code adds xxx-xxx-xxx-xxx to domain name when creating URL.
1328-
* If it starts with "*.", these two symbols are ignored and do not count towards the character limit.
1329-
*/
1330-
protected String validateRangeDomainName(String value) {
1331-
String domainName = value;
1332-
if (value.startsWith("*")) {
1333-
domainName = value.substring(2); //skip the "*."
1334-
}
1335-
if (domainName.length() >= 238 || !domainName.matches(DOMAIN_NAME_PATTERN)) {
1336-
return "a valid domain name";
1337-
}
1338-
return null;
1339-
}
1340-
1341-
protected String validateRangeOther(String name, String value, String rangeOption) {
1342-
final String[] options = rangeOption.split(",");
1343-
for (final String option : options) {
1344-
if (option.trim().equalsIgnoreCase(value)) {
1345-
return null;
1346-
}
1347-
}
1348-
s_logger.error(String.format("Invalid value for configuration [%s].", name));
1349-
return String.format("a valid value for this configuration (Options are: [%s])", rangeOption);
1350-
}
1351-
13521301

13531302
private boolean podHasAllocatedPrivateIPs(final long podId) {
13541303
final HostPodVO pod = _podDao.findById(podId);

0 commit comments

Comments
 (0)