Subversion Repositories debpool

Compare Revisions

Ignore whitespace Rev 9 → Rev 10

/branches/magnus/share/DebPool/Packages.pm
763,27 → 763,30
 
sub Verify_MD5 {
use DebPool::Logging qw(:functions :facility :level);
use Digest::MD5;
 
my($file, $md5) = @_;
my($fh);
 
# Read in and mangle the md5 output.
 
if (! -r $file) { # The file doesn't exist! Will be hard to checksum it...
my($msg) = "MD5 checksum unavailable: file '$file' does not exist!";
unless (open($fh, '<', $file) && binmode($fh)) {
my($msg) = "Can't open '$file' for reading: $!";
Log_Message($msg, LOG_GENERAL, LOG_ERROR);
return 0;
}
 
my($cmd_result) = `/usr/bin/md5sum $file`;
if (!$cmd_result) { # Failed to run md5sum for some reason
my($msg) = "MD5 checksum unavailable: file '$file'";
Log_Message($msg, LOG_GENERAL, LOG_ERROR);
my($digester) = new Digest::MD5;
my($check_md5);
eval { # addfile can croak
$check_md5 = $digester->addfile($fh)->hexdigest;
};
if ($@) {
Log_Message("Failed to compute MD5 checksum for '$file': $@",
LOG_GENERAL, LOG_ERROR);
return 0;
}
 
$cmd_result =~ m/^([[:xdigit:]]+)\s+/;
my($check_md5) = $1;
 
if ($md5 ne $check_md5) {
my($msg) = "MD5 checksum failure: file '$file', ";
$msg .= "expected '$md5', got '$check_md5'";