all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] applied: [PATCH] tools: download from url: add option to allow overriding existing files
@ 2021-06-16 10:45 Thomas Lamprecht
  0 siblings, 0 replies; only message in thread
From: Thomas Lamprecht @ 2021-06-16 10:45 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
---

allows for slightly nicer UX and drops the confusing special case of
"always allow overwriting if no checksum algorithm was passed".

 src/PVE/Tools.pm | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 9046b4f..465c338 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -1842,6 +1842,7 @@ sub safe_compare {
 
 
 # opts is a hash ref with the following known properties
+#  allow_overwrite - if 1, overwriting existing files is allowed, use with care. Default to false
 #  hash_required - if 1, at least one checksum has to be specified otherwise an error will be thrown
 #  http_proxy
 #  https_proxy
@@ -1862,17 +1863,22 @@ sub download_file_from_url {
 
     print "downloading $url to $dest\n";
 
-    if (-f $dest && $checksum_algorithm) {
-	print "calculating checksum of existing file...";
-	my $checksum_got = get_file_hash($checksum_algorithm, $dest);
+    if (-f $dest) {
+	if ($checksum_algorithm) {
+	    print "calculating checksum of existing file...";
+	    my $checksum_got = get_file_hash($checksum_algorithm, $dest);
 
-	if (lc($checksum_got) eq lc($checksum_expected)) {
-	    print "OK, got correct file already, no need to download\n";
-	    return;
-	} else {
-	    # we could re-download, but may not be safe so just abort for now..
-	    print "\n";  # the front end expects the error to reside at the last line without any noise
-	    die "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', aborting\n";
+	    if (lc($checksum_got) eq lc($checksum_expected)) {
+		print "OK, got correct file already, no need to download\n";
+		return;
+	    } elsif ($opts->{allow_overwrite}) {
+		print "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', re-download\n";
+	    } else {
+		print "\n";  # the front end expects the error to reside at the last line without any noise
+		die "checksum mismatch: got '$checksum_got' != expect '$checksum_expected', aborting\n";
+	    }
+	} elsif (!$opts->{allow_overwrite}) {
+	    die "refusing to override existing file '$dest'\n";
 	}
     }
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-06-16 10:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-16 10:45 [pve-devel] applied: [PATCH] tools: download from url: add option to allow overriding existing files Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal