You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/08/12 20:51:52 UTC
[1/3] git commit: updated refs/heads/master to e356465
Repository: cloudstack
Updated Branches:
refs/heads/master af3774304 -> e3564658b
CLOUDSTACK-6940, CLOUDSTACK-7312, CLOUDSTACK-5512: Template/ISO/Volume
upload rejects some valid URL formats. Also consolidate URL format check
into one util routine.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e3564658
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e3564658
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e3564658
Branch: refs/heads/master
Commit: e3564658befaa72cbe5fd510bea2a25b40f108f5
Parents: 83bd4d6
Author: Min Chen <mi...@citrix.com>
Authored: Tue Aug 12 11:42:17 2014 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Aug 12 11:43:08 2014 -0700
----------------------------------------------------------------------
.../template/HttpTemplateDownloader.java | 10 ++-
.../com/cloud/storage/VolumeApiServiceImpl.java | 22 +----
.../template/HypervisorTemplateAdapter.java | 87 +-------------------
utils/src/com/cloud/utils/UriUtils.java | 83 ++++++++++++++++++-
.../utils/template/TemplateUtils.java | 28 +++----
5 files changed, 107 insertions(+), 123 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3564658/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/template/HttpTemplateDownloader.java b/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
index 5bfa1f7..ed6c9f0 100644
--- a/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
+++ b/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
+import java.net.URI;
import java.net.URISyntaxException;
import java.util.Date;
@@ -251,7 +252,14 @@ public class HttpTemplateDownloader extends ManagedContextRunnable implements Te
out.seek(offset);
totalBytes += bytes;
if (!verifiedFormat && (offset >= 1048576 || offset >= remoteSize)) { //let's check format after we get 1MB or full file
- String unsupportedFormat = TemplateUtils.checkTemplateFormat(file.getAbsolutePath(), getDownloadUrl());
+ String uripath = null;
+ try {
+ URI str = new URI(getDownloadUrl());
+ uripath = str.getPath();
+ } catch (URISyntaxException e) {
+ s_logger.warn("Invalid download url: " + getDownloadUrl() + ", This should not happen since we have validated the url before!!");
+ }
+ String unsupportedFormat = TemplateUtils.checkTemplateFormat(file.getAbsolutePath(), uripath);
if (unsupportedFormat == null || !unsupportedFormat.isEmpty()) {
try {
request.abort();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3564658/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 5a83ac9..8d83225 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -295,26 +295,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
if (userSpecifiedName == null) {
userSpecifiedName = getRandomVolumeName();
}
- if ((!url.toLowerCase().endsWith("vhd")) && (!url.toLowerCase().endsWith("vhd.zip")) && (!url.toLowerCase().endsWith("vhd.bz2")) && (!url.toLowerCase().endsWith("vhdx"))
- && (!url.toLowerCase().endsWith("vhdx.zip")) && (!url.toLowerCase().endsWith("vhdx.gz")) && (!url.toLowerCase().endsWith("vhdx.bz2"))
- && (!url.toLowerCase().endsWith("vhd.gz")) && (!url.toLowerCase().endsWith("qcow2")) && (!url.toLowerCase().endsWith("qcow2.zip"))
- && (!url.toLowerCase().endsWith("qcow2.bz2")) && (!url.toLowerCase().endsWith("qcow2.gz")) && (!url.toLowerCase().endsWith("ova"))
- && (!url.toLowerCase().endsWith("ova.zip")) && (!url.toLowerCase().endsWith("ova.bz2")) && (!url.toLowerCase().endsWith("ova.gz"))
- && (!url.toLowerCase().endsWith("img")) && (!url.toLowerCase().endsWith("raw"))) {
- throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
- }
-
- if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith(".vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url
- .toLowerCase().endsWith("vhd.gz")))
- || (format.equalsIgnoreCase("vhdx") && (!url.toLowerCase().endsWith(".vhdx") && !url.toLowerCase().endsWith("vhdx.zip") && !url.toLowerCase().endsWith("vhdx.bz2") && !url
- .toLowerCase().endsWith("vhdx.gz")))
- || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith(".qcow2") && !url.toLowerCase().endsWith("qcow2.zip")
- && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz")))
- || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith(".ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url
- .toLowerCase().endsWith("ova.gz"))) || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith(".img") && !url.toLowerCase().endsWith("raw")))) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase());
- }
- UriUtils.validateUrl(url);
+
+ UriUtils.validateUrl(format, url);
// Check that the resource limit for secondary storage won't be exceeded
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3564658/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index 51dedf7..72aaff5 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -16,8 +16,6 @@
// under the License.
package com.cloud.template;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -113,13 +111,7 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
TemplateProfile profile = super.prepare(cmd);
String url = profile.getUrl();
-
- if ((!url.toLowerCase().endsWith("iso")) && (!url.toLowerCase().endsWith("iso.zip")) && (!url.toLowerCase().endsWith("iso.bz2")) &&
- (!url.toLowerCase().endsWith("iso.gz"))) {
- throw new InvalidParameterValueException("Please specify a valid iso");
- }
-
- UriUtils.validateUrl(url);
+ UriUtils.validateUrl(ImageFormat.ISO.getFileExtension(), url);
profile.setUrl(url);
// Check that the resource limit for secondary storage won't be exceeded
_resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()), ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
@@ -130,88 +122,13 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
TemplateProfile profile = super.prepare(cmd);
String url = profile.getUrl();
- String path = null;
- try {
- URL str = new URL(url);
- path = str.getPath();
- } catch (MalformedURLException ex) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is invalid");
- }
-
- try {
- checkFormat(cmd.getFormat(), url);
- } catch (InvalidParameterValueException ex) {
- checkFormat(cmd.getFormat(), path);
- }
-
- UriUtils.validateUrl(url);
+ UriUtils.validateUrl(cmd.getFormat(), url);
profile.setUrl(url);
// Check that the resource limit for secondary storage won't be exceeded
_resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()), ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
return profile;
}
- private void checkFormat(String format, String url) {
- if ((!url.toLowerCase().endsWith("vhd")) && (!url.toLowerCase().endsWith("vhd.zip")) && (!url.toLowerCase().endsWith("vhd.bz2")) &&
- (!url.toLowerCase().endsWith("vhdx")) && (!url.toLowerCase().endsWith("vhdx.gz")) &&
- (!url.toLowerCase().endsWith("vhdx.bz2")) && (!url.toLowerCase().endsWith("vhdx.zip")) &&
- (!url.toLowerCase().endsWith("vhd.gz")) && (!url.toLowerCase().endsWith("qcow2")) && (!url.toLowerCase().endsWith("qcow2.zip")) &&
- (!url.toLowerCase().endsWith("qcow2.bz2")) && (!url.toLowerCase().endsWith("qcow2.gz")) && (!url.toLowerCase().endsWith("ova")) &&
- (!url.toLowerCase().endsWith("ova.zip")) && (!url.toLowerCase().endsWith("ova.bz2")) && (!url.toLowerCase().endsWith("ova.gz")) &&
- (!url.toLowerCase().endsWith("tar")) && (!url.toLowerCase().endsWith("tar.zip")) && (!url.toLowerCase().endsWith("tar.bz2")) &&
- (!url.toLowerCase().endsWith("tar.gz")) && (!url.toLowerCase().endsWith("vmdk")) && (!url.toLowerCase().endsWith("vmdk.gz")) &&
- (!url.toLowerCase().endsWith("vmdk.zip")) && (!url.toLowerCase().endsWith("vmdk.bz2")) && (!url.toLowerCase().endsWith("img")) &&
- (!url.toLowerCase().endsWith("img.gz")) && (!url.toLowerCase().endsWith("img.zip")) && (!url.toLowerCase().endsWith("img.bz2")) &&
- (!url.toLowerCase().endsWith("raw")) && (!url.toLowerCase().endsWith("raw.gz")) && (!url.toLowerCase().endsWith("raw.bz2")) &&
- (!url.toLowerCase().endsWith("raw.zip"))) {
- throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
- }
-
- if ((format.equalsIgnoreCase("vhd")
- && (!url.toLowerCase().endsWith("vhd")
- && !url.toLowerCase().endsWith("vhd.zip")
- && !url.toLowerCase().endsWith("vhd.bz2")
- && !url.toLowerCase().endsWith("vhd.gz")))
- || (format.equalsIgnoreCase("vhdx")
- && (!url.toLowerCase().endsWith("vhdx")
- && !url.toLowerCase().endsWith("vhdx.zip")
- && !url.toLowerCase().endsWith("vhdx.bz2")
- && !url.toLowerCase().endsWith("vhdx.gz")))
- || (format.equalsIgnoreCase("qcow2")
- && (!url.toLowerCase().endsWith("qcow2")
- && !url.toLowerCase().endsWith("qcow2.zip")
- && !url.toLowerCase().endsWith("qcow2.bz2")
- && !url.toLowerCase().endsWith("qcow2.gz")))
- || (format.equalsIgnoreCase("ova")
- && (!url.toLowerCase().endsWith("ova")
- && !url.toLowerCase().endsWith("ova.zip")
- && !url.toLowerCase().endsWith("ova.bz2")
- && !url.toLowerCase().endsWith("ova.gz")))
- || (format.equalsIgnoreCase("tar")
- && (!url.toLowerCase().endsWith("tar")
- && !url.toLowerCase().endsWith("tar.zip")
- && !url.toLowerCase().endsWith("tar.bz2")
- && !url.toLowerCase().endsWith("tar.gz")))
- || (format.equalsIgnoreCase("raw")
- && (!url.toLowerCase().endsWith("img")
- && !url.toLowerCase().endsWith("img.zip")
- && !url.toLowerCase().endsWith("img.bz2")
- && !url.toLowerCase().endsWith("img.gz")
- && !url.toLowerCase().endsWith("raw")
- && !url.toLowerCase().endsWith("raw.bz2")
- && !url.toLowerCase().endsWith("raw.zip")
- && !url.toLowerCase().endsWith("raw.gz")))
- || (format.equalsIgnoreCase("vmdk")
- && (!url.toLowerCase().endsWith("vmdk")
- && !url.toLowerCase().endsWith("vmdk.zip")
- && !url.toLowerCase().endsWith("vmdk.bz2")
- && !url.toLowerCase().endsWith("vmdk.gz")))
- ) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase());
- }
-
- }
-
@Override
public VMTemplateVO create(TemplateProfile profile) {
// persist entry in vm_template, vm_template_details and template_zone_ref tables, not that entry at template_store_ref is not created here, and created in createTemplateAsync.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3564658/utils/src/com/cloud/utils/UriUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java
index 6b28afb..0657c74 100644
--- a/utils/src/com/cloud/utils/UriUtils.java
+++ b/utils/src/com/cloud/utils/UriUtils.java
@@ -45,9 +45,9 @@ import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.http.NameValuePair;
-import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.client.utils.URLEncodedUtils;
+import org.apache.http.message.BasicNameValuePair;
import org.apache.log4j.Logger;
import com.cloud.utils.crypt.DBEncryptionUtil;
@@ -233,10 +233,14 @@ public class UriUtils {
}
public static Pair<String, Integer> validateUrl(String url) throws IllegalArgumentException {
+ return validateUrl(null, url);
+ }
+
+ public static Pair<String, Integer> validateUrl(String format, String url) throws IllegalArgumentException {
try {
URI uri = new URI(url);
if ((uri.getScheme() == null) ||
- (!uri.getScheme().equalsIgnoreCase("http") && !uri.getScheme().equalsIgnoreCase("https") && !uri.getScheme().equalsIgnoreCase("file"))) {
+ (!uri.getScheme().equalsIgnoreCase("http") && !uri.getScheme().equalsIgnoreCase("https") && !uri.getScheme().equalsIgnoreCase("file"))) {
throw new IllegalArgumentException("Unsupported scheme for url: " + url);
}
int port = uri.getPort();
@@ -259,15 +263,88 @@ public class UriUtils {
if (hostAddr instanceof Inet6Address) {
throw new IllegalArgumentException("IPV6 addresses not supported (" + hostAddr.getHostAddress() + ")");
}
- return new Pair<String, Integer>(host, port);
} catch (UnknownHostException uhe) {
throw new IllegalArgumentException("Unable to resolve " + host);
}
+
+ // verify format
+ if (format != null) {
+ String uripath = uri.getPath();
+ checkFormat(format, uripath);
+ }
+ return new Pair<String, Integer>(host, port);
+
} catch (URISyntaxException use) {
throw new IllegalArgumentException("Invalid URL: " + url);
}
}
+ // verify if a URI path is compliance with the file format given
+ private static void checkFormat(String format, String uripath) {
+ if ((!uripath.toLowerCase().endsWith("vhd")) && (!uripath.toLowerCase().endsWith("vhd.zip")) && (!uripath.toLowerCase().endsWith("vhd.bz2")) &&
+ (!uripath.toLowerCase().endsWith("vhdx")) && (!uripath.toLowerCase().endsWith("vhdx.gz")) &&
+ (!uripath.toLowerCase().endsWith("vhdx.bz2")) && (!uripath.toLowerCase().endsWith("vhdx.zip")) &&
+ (!uripath.toLowerCase().endsWith("vhd.gz")) && (!uripath.toLowerCase().endsWith("qcow2")) && (!uripath.toLowerCase().endsWith("qcow2.zip")) &&
+ (!uripath.toLowerCase().endsWith("qcow2.bz2")) && (!uripath.toLowerCase().endsWith("qcow2.gz")) && (!uripath.toLowerCase().endsWith("ova")) &&
+ (!uripath.toLowerCase().endsWith("ova.zip")) && (!uripath.toLowerCase().endsWith("ova.bz2")) && (!uripath.toLowerCase().endsWith("ova.gz")) &&
+ (!uripath.toLowerCase().endsWith("tar")) && (!uripath.toLowerCase().endsWith("tar.zip")) && (!uripath.toLowerCase().endsWith("tar.bz2")) &&
+ (!uripath.toLowerCase().endsWith("tar.gz")) && (!uripath.toLowerCase().endsWith("vmdk")) && (!uripath.toLowerCase().endsWith("vmdk.gz")) &&
+ (!uripath.toLowerCase().endsWith("vmdk.zip")) && (!uripath.toLowerCase().endsWith("vmdk.bz2")) && (!uripath.toLowerCase().endsWith("img")) &&
+ (!uripath.toLowerCase().endsWith("img.gz")) && (!uripath.toLowerCase().endsWith("img.zip")) && (!uripath.toLowerCase().endsWith("img.bz2")) &&
+ (!uripath.toLowerCase().endsWith("raw")) && (!uripath.toLowerCase().endsWith("raw.gz")) && (!uripath.toLowerCase().endsWith("raw.bz2")) &&
+ (!uripath.toLowerCase().endsWith("raw.zip")) && (!uripath.toLowerCase().endsWith("iso")) && (!uripath.toLowerCase().endsWith("iso.zip"))
+ && (!uripath.toLowerCase().endsWith("iso.bz2")) && (!uripath.toLowerCase().endsWith("iso.gz"))) {
+ throw new IllegalArgumentException("Please specify a valid " + format.toLowerCase());
+ }
+
+ if ((format.equalsIgnoreCase("vhd")
+ && (!uripath.toLowerCase().endsWith("vhd")
+ && !uripath.toLowerCase().endsWith("vhd.zip")
+ && !uripath.toLowerCase().endsWith("vhd.bz2")
+ && !uripath.toLowerCase().endsWith("vhd.gz")))
+ || (format.equalsIgnoreCase("vhdx")
+ && (!uripath.toLowerCase().endsWith("vhdx")
+ && !uripath.toLowerCase().endsWith("vhdx.zip")
+ && !uripath.toLowerCase().endsWith("vhdx.bz2")
+ && !uripath.toLowerCase().endsWith("vhdx.gz")))
+ || (format.equalsIgnoreCase("qcow2")
+ && (!uripath.toLowerCase().endsWith("qcow2")
+ && !uripath.toLowerCase().endsWith("qcow2.zip")
+ && !uripath.toLowerCase().endsWith("qcow2.bz2")
+ && !uripath.toLowerCase().endsWith("qcow2.gz")))
+ || (format.equalsIgnoreCase("ova")
+ && (!uripath.toLowerCase().endsWith("ova")
+ && !uripath.toLowerCase().endsWith("ova.zip")
+ && !uripath.toLowerCase().endsWith("ova.bz2")
+ && !uripath.toLowerCase().endsWith("ova.gz")))
+ || (format.equalsIgnoreCase("tar")
+ && (!uripath.toLowerCase().endsWith("tar")
+ && !uripath.toLowerCase().endsWith("tar.zip")
+ && !uripath.toLowerCase().endsWith("tar.bz2")
+ && !uripath.toLowerCase().endsWith("tar.gz")))
+ || (format.equalsIgnoreCase("raw")
+ && (!uripath.toLowerCase().endsWith("img")
+ && !uripath.toLowerCase().endsWith("img.zip")
+ && !uripath.toLowerCase().endsWith("img.bz2")
+ && !uripath.toLowerCase().endsWith("img.gz")
+ && !uripath.toLowerCase().endsWith("raw")
+ && !uripath.toLowerCase().endsWith("raw.bz2")
+ && !uripath.toLowerCase().endsWith("raw.zip")
+ && !uripath.toLowerCase().endsWith("raw.gz")))
+ || (format.equalsIgnoreCase("vmdk")
+ && (!uripath.toLowerCase().endsWith("vmdk")
+ && !uripath.toLowerCase().endsWith("vmdk.zip")
+ && !uripath.toLowerCase().endsWith("vmdk.bz2")
+ && !uripath.toLowerCase().endsWith("vmdk.gz")))
+ || (format.equalsIgnoreCase("iso")
+ && (!uripath.toLowerCase().endsWith("iso.zip")
+ && !uripath.toLowerCase().endsWith("iso.bz2")
+ && !uripath.toLowerCase().endsWith("iso.gz")))) {
+ throw new IllegalArgumentException("Please specify a valid URL. URL:" + uripath + " is an invalid for the format " + format.toLowerCase());
+ }
+
+ }
+
public static InputStream getInputStreamFromUrl(String url, String user, String password) {
try {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e3564658/utils/src/org/apache/cloudstack/utils/template/TemplateUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/org/apache/cloudstack/utils/template/TemplateUtils.java b/utils/src/org/apache/cloudstack/utils/template/TemplateUtils.java
index cf1e177..53aa911 100644
--- a/utils/src/org/apache/cloudstack/utils/template/TemplateUtils.java
+++ b/utils/src/org/apache/cloudstack/utils/template/TemplateUtils.java
@@ -28,58 +28,58 @@ public class TemplateUtils {
// given a path, returns empty if path is supported image, and the file type if unsupported
// this is meant to catch things like accidental upload of ASCII text .vmdk descriptor
- public static String checkTemplateFormat(String path, String url) {
+ public static String checkTemplateFormat(String path, String uripath) {
// note 'path' was generated by us so it should be safe on the cmdline, be wary of 'url'
String command = "file ";
- if (isCompressedExtension(url)) {
+ if (isCompressedExtension(uripath)) {
command = "file -z ";
}
String output = Script.runSimpleBashScript(command + path + " | cut -d: -f2", 60000);
// vmdk
- if ((output.contains("VMware") || output.contains("data")) && isCorrectExtension(url, "vmdk")) {
+ if ((output.contains("VMware") || output.contains("data")) && isCorrectExtension(uripath, "vmdk")) {
s_logger.debug("File at path " + path + " looks like a vmware image :" + output);
return "";
}
// raw
- if ((output.contains("x86 boot") || output.contains("data")) && (isCorrectExtension(url, "raw") || isCorrectExtension(url, "img"))) {
+ if ((output.contains("x86 boot") || output.contains("data")) && (isCorrectExtension(uripath, "raw") || isCorrectExtension(uripath, "img"))) {
s_logger.debug("File at path " + path + " looks like a raw image :" + output);
return "";
}
// qcow2
- if (output.contains("QEMU QCOW") && isCorrectExtension(url, "qcow2")) {
+ if (output.contains("QEMU QCOW") && isCorrectExtension(uripath, "qcow2")) {
s_logger.debug("File at path " + path + " looks like QCOW2 : " + output);
return "";
}
// vhd
- if (output.contains("Microsoft Disk Image") && (isCorrectExtension(url, "vhd") || isCorrectExtension(url, "vhdx"))) {
+ if (output.contains("Microsoft Disk Image") && (isCorrectExtension(uripath, "vhd") || isCorrectExtension(uripath, "vhdx"))) {
s_logger.debug("File at path " + path + " looks like vhd : " + output);
return "";
}
// ova
- if (output.contains("POSIX tar") && isCorrectExtension(url, "ova")) {
+ if (output.contains("POSIX tar") && isCorrectExtension(uripath, "ova")) {
s_logger.debug("File at path " + path + " looks like ova : " + output);
return "";
}
//lxc
- if (output.contains("POSIX tar") && isCorrectExtension(url, "tar")) {
+ if (output.contains("POSIX tar") && isCorrectExtension(uripath, "tar")) {
s_logger.debug("File at path " + path + " looks like just tar : " + output);
return "";
}
- if (output.contains("ISO 9660") && isCorrectExtension(url, "iso")) {
+ if (output.contains("ISO 9660") && isCorrectExtension(uripath, "iso")) {
s_logger.debug("File at path " + path + " looks like an iso : " + output);
return "";
}
return output;
}
- public static boolean isCorrectExtension(String url, String ext) {
- if (url.toLowerCase().endsWith(ext)
- || url.toLowerCase().endsWith(ext + ".gz")
- || url.toLowerCase().endsWith(ext + ".bz2")
- || url.toLowerCase().endsWith(ext + ".zip")) {
+ public static boolean isCorrectExtension(String path, String ext) {
+ if (path.toLowerCase().endsWith(ext)
+ || path.toLowerCase().endsWith(ext + ".gz")
+ || path.toLowerCase().endsWith(ext + ".bz2")
+ || path.toLowerCase().endsWith(ext + ".zip")) {
return true;
}
return false;
[2/3] git commit: updated refs/heads/master to e356465
Posted by mc...@apache.org.
Revert "CLOUDSTACK-7312:ISOs cannot be downloaded from URLs without matching"
This reverts commit 737f76df8c86666b47ba347ae46fc10d73b1fee6.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/83bd4d60
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/83bd4d60
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/83bd4d60
Branch: refs/heads/master
Commit: 83bd4d60f118050840cf53e96369999c6e0582ad
Parents: a8316de
Author: Min Chen <mi...@citrix.com>
Authored: Mon Aug 11 17:04:06 2014 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Aug 12 11:43:08 2014 -0700
----------------------------------------------------------------------
server/src/com/cloud/template/HypervisorTemplateAdapter.java | 6 ++++++
1 file changed, 6 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/83bd4d60/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index 419a501..51dedf7 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -113,6 +113,12 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
TemplateProfile profile = super.prepare(cmd);
String url = profile.getUrl();
+
+ if ((!url.toLowerCase().endsWith("iso")) && (!url.toLowerCase().endsWith("iso.zip")) && (!url.toLowerCase().endsWith("iso.bz2")) &&
+ (!url.toLowerCase().endsWith("iso.gz"))) {
+ throw new InvalidParameterValueException("Please specify a valid iso");
+ }
+
UriUtils.validateUrl(url);
profile.setUrl(url);
// Check that the resource limit for secondary storage won't be exceeded
[3/3] git commit: updated refs/heads/master to e356465
Posted by mc...@apache.org.
Revert "CLOUDSTACK-6940:Templates cannot be downloaded from URLs without"
This reverts commit 569e94908b6fa471f2f72578e1ff21f3fa7c6a4e.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a8316de7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a8316de7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a8316de7
Branch: refs/heads/master
Commit: a8316de725db149aec8545bb5b0dfb7c71be2824
Parents: af37743
Author: Min Chen <mi...@citrix.com>
Authored: Mon Aug 11 17:03:53 2014 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Aug 12 11:43:08 2014 -0700
----------------------------------------------------------------------
.../cloud/template/HypervisorTemplateAdapter.java | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8316de7/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index 9b17c30..419a501 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -16,6 +16,8 @@
// under the License.
package com.cloud.template;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -122,6 +124,20 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
TemplateProfile profile = super.prepare(cmd);
String url = profile.getUrl();
+ String path = null;
+ try {
+ URL str = new URL(url);
+ path = str.getPath();
+ } catch (MalformedURLException ex) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is invalid");
+ }
+
+ try {
+ checkFormat(cmd.getFormat(), url);
+ } catch (InvalidParameterValueException ex) {
+ checkFormat(cmd.getFormat(), path);
+ }
+
UriUtils.validateUrl(url);
profile.setUrl(url);
// Check that the resource limit for secondary storage won't be exceeded