Changeset 48253


Ignore:
Timestamp:
2016-01-16T01:19:41+01:00 (2 years ago)
Author:
nbd
Message:

scripts/download.pl: add SHA-256 support

Signed-off-by: Felix Fietkau <nbd@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/download.pl

    r47825 r48253  
    1212use File::Copy; 
    1313 
    14 @ARGV > 2 or die "Syntax: $0 <target dir> <filename> <md5sum> <url filename> [<mirror> ...]\n"; 
     14@ARGV > 2 or die "Syntax: $0 <target dir> <filename> <hash> <url filename> [<mirror> ...]\n"; 
    1515 
    1616my $url_filename; 
    1717my $target = shift @ARGV; 
    1818my $filename = shift @ARGV; 
    19 my $md5sum = shift @ARGV; 
     19my $file_hash = shift @ARGV; 
    2020$url_filename = shift @ARGV unless $ARGV[0] =~ /:\/\//; 
    2121my $scriptdir = dirname($0); 
     
    6060} 
    6161 
    62 my $md5cmd = which("md5sum") || which("md5") || die 'no md5 checksum program found, please install md5 or md5sum'; 
    63 chomp $md5cmd; 
     62sub hash_cmd() { 
     63        my $len = length($file_hash); 
     64        my $cmd; 
     65 
     66        $len == 64 and return "openssl dgst -sha256"; 
     67        $len == 32 and do { 
     68                my $cmd = which("md5sum") || which("md5") || die 'no md5 checksum program found, please install md5 or md5sum'; 
     69                chomp $cmd; 
     70                return $cmd; 
     71        }; 
     72        return undef; 
     73} 
     74 
     75my $hash_cmd = hash_cmd(); 
    6476 
    6577sub download 
     
    106118                copy($link, "$target/$filename.dl"); 
    107119 
    108                 if (system("$md5cmd '$target/$filename.dl' > '$target/$filename.md5sum'")) { 
    109                         print("Failed to generate md5 sum for $filename\n"); 
    110                         return; 
    111                 } 
     120                $hash_cmd and do { 
     121                        if (system("$hash_cmd '$target/$filename.dl' > '$target/$filename.hash'")) { 
     122                                print("Failed to generate hash for $filename\n"); 
     123                                return; 
     124                        } 
     125                }; 
    112126        } else { 
    113127                open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- '$mirror/$url_filename' |" or die "Cannot launch wget.\n"; 
    114                 open MD5SUM, "| $md5cmd > '$target/$filename.md5sum'" or die "Cannot launch md5sum.\n"; 
     128                $hash_cmd and do { 
     129                        open MD5SUM, "| $hash_cmd > '$target/$filename.hash'" or die "Cannot launch $hash_cmd.\n"; 
     130                }; 
    115131                open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; 
    116132                my $buffer; 
    117133                while (read WGET, $buffer, 1048576) { 
    118                         print MD5SUM $buffer; 
     134                        $hash_cmd and print MD5SUM $buffer; 
    119135                        print OUTPUT $buffer; 
    120136                } 
    121                 close MD5SUM; 
     137                $hash_cmd and close MD5SUM; 
    122138                close WGET; 
    123139                close OUTPUT; 
     
    130146        } 
    131147 
    132         my $sum = `cat "$target/$filename.md5sum"`; 
    133         $sum =~ /^(\w+)\s*/ or die "Could not generate md5sum\n"; 
    134         $sum = $1; 
    135  
    136         if (($md5sum =~ /\w{32}/) and ($sum ne $md5sum)) { 
    137                 print STDERR "MD5 sum of the downloaded file does not match (file: $sum, requested: $md5sum) - deleting download.\n"; 
    138                 cleanup(); 
    139                 return; 
    140         } 
     148        $hash_cmd and do { 
     149                my $sum = `cat "$target/$filename.hash"`; 
     150                $sum =~ /^(\w+)\s*/ or die "Could not generate file hash\n"; 
     151                $sum = $1; 
     152 
     153                if ($sum ne $file_hash) { 
     154                        print STDERR "MD5 sum of the downloaded file does not match (file: $sum, requested: $file_hash) - deleting download.\n"; 
     155                        cleanup(); 
     156                        return; 
     157                } 
     158        }; 
    141159 
    142160        unlink "$target/$filename"; 
     
    148166{ 
    149167        unlink "$target/$filename.dl"; 
    150         unlink "$target/$filename.md5sum"; 
     168        unlink "$target/$filename.hash"; 
    151169} 
    152170 
Note: See TracChangeset for help on using the changeset viewer.