From 06c1c13f1c090e4dc8a76955b4f221563cee76b2 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Wed, 16 Jun 2021 12:41:33 +0200 Subject: [PATCH] tools: download from url: add option to allow overriding existing files Signed-off-by: Thomas Lamprecht --- 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.39.2