[PATCH] Use the new Dpkg::Checksums module in scripts
* scripts/dpkg-genchanges.pl, scripts/dpkg-source.pl: Convert
all checksum handling code to use the new module.
---
scripts/dpkg-genchanges.pl | 34 ++++++++++++++++------------------
scripts/dpkg-source.pl | 40 ++++++++++++++++------------------------
2 files changed, 32 insertions(+), 42 deletions(-)
diff --git a/scripts/dpkg-genchanges.pl b/scripts/dpkg-genchanges.pl
index 9fb13fc..38b7ecb 100755
--- a/scripts/dpkg-genchanges.pl
+++ b/scripts/dpkg-genchanges.pl
@@ -8,6 +8,7 @@ use POSIX qw(:errno_h :signal_h);
use English;
use Dpkg;
use Dpkg::Gettext;
+use Dpkg::Checksums;
use Dpkg::ErrorHandling qw(warning error failure unknown internerr syserr
subprocerr usageerr);
use Dpkg::Arch qw(get_host_arch debarch_eq debarch_is);
@@ -35,6 +36,7 @@ my $sourcestyle = 'i';
my $quiet = 0;
my $host_arch = get_host_arch();
my $changes_format = "1.7";
+my $checksum = 'md5sum';
my %f2p; # - file to package map
my %p2f; # - package to file map, has entries for "packagename"
@@ -52,7 +54,8 @@ my @descriptions;
my @sourcefiles;
my @fileslistfiles;
-my %md5sum; # - md5sum to file map
+my %checksum; # - file to checksum map
+my %size; # - file to size map
my %remove; # - fields to remove
my %override;
my %archadded;
@@ -382,9 +385,9 @@ if (!is_binaryonly) {
my $files = $dsc_fields->{'Files'};
for my $file (split(/\n /, $files)) {
next if $file eq '';
- $file =~ m/^([0-9a-f]{32})[ \t]+\d+[ \t]+([0-9a-zA-Z][-+:.,=0-9a-zA-Z_~]+)$/
+ $file =~ m/^($check_regex)[ \t]+(\d+)[ \t]+([0-9a-zA-Z][-+:.,=0-9a-zA-Z_~]+)$/
|| error(_g("Files field contains bad line \`%s'"), $file);
- ($md5sum{$2},$file) = ($1,$2);
+ ($checksum{$3},$size{$3},$file) = ($1,$2,$3);
push(@sourcefiles,$file);
}
for my $f (@sourcefiles) {
@@ -438,21 +441,16 @@ for my $f (@sourcefiles, @fileslistfiles) {
next if ($include == ARCH_INDEP and not debarch_eq('all', $p2arch{$f2p{$f}}));
next if $filedone{$f}++;
my $uf = "$uploadfilesdir/$f";
- open(STDIN, "<", $uf) ||
- syserr(_g("cannot open upload file %s for reading"), $uf);
- (my @s = stat(STDIN)) || syserr(_g("cannot fstat upload file %s"), $uf);
- my $size = $s[7];
- $size || warning(_g("upload file %s is empty"), $uf);
- my $md5sum = `md5sum`;
- $? && subprocerr(_g("md5sum upload file %s"), $uf);
- $md5sum =~ m/^([0-9a-f]{32})\s*-?\s*$/i ||
- failure(_g("md5sum upload file %s gave strange output \`%s'"),
- $uf, $md5sum);
- $md5sum= $1;
- defined($md5sum{$f}) && $md5sum{$f} ne $md5sum &&
- error(_g("md5sum of source file %s (%s) is different from md5sum " .
- "in %s (%s)"), $uf, $md5sum, $dsc, $md5sum{$f});
- $fields->{'Files'}.= "\n $md5sum $size $f2sec{$f} $f2pri{$f} $f";
+ my ($sum, $size) = getchecksum($checksum, $uf);
+ if (defined($checksum{$f})) { # verify checksums from .dsc
+ if (length($checksum{$f}) != length($sum)) { # different algorithm
+ verifychecksum($uf, $checksum{$f}, $size{$f}, $dsc);
+ } elsif ($checksum{$f} ne $sum) {
+ error(_g("checksum of source file %s (%s) is different from checksum " .
+ "in %s (%s)"), $uf, $sum, $dsc, $checksum{$f});
+ }
+ }
+ $fields->{'Files'}.= "\n $sum $size $f2sec{$f} $f2pri{$f} $f";
}
$fields->{'Source'}= $sourcepackage;
diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl
index af4cd57..afe97cd 100755
--- a/scripts/dpkg-source.pl
+++ b/scripts/dpkg-source.pl
@@ -5,6 +5,7 @@ use warnings;
use Dpkg;
use Dpkg::Gettext;
+use Dpkg::Checksums;
use Dpkg::ErrorHandling qw(warning warnerror error failure unknown
internerr syserr subprocerr usageerr
$warnable_error $quiet_warnings);
@@ -93,12 +94,15 @@ my $compression = 'gzip';
my $comp_level = '9';
my $comp_ext = $comp_ext{$compression};
+# Checksum
+my $checksum = 'md5sum';
+
# Packages
my %remove;
my %override;
# Files
-my %md5sum;
+my %checksum;
my %size;
my %type; # used by checktype
my %filepatched; # used by checkdiff
@@ -873,10 +877,13 @@ if ($opmode eq 'build') {
my $debianfile;
my %seen;
for my $file (split(/\n /, $files)) {
- next if $file eq '';
- $file =~ m/^([0-9a-f]{32})[ \t]+(\d+)[ \t]+([0-9a-zA-Z][-+:.,=0-9a-zA-Z_~]+)$/
- || error(_g("Files field contains bad line `%s'"), $file);
- ($md5sum{$3},$size{$3},$file) = ($1,$2,$3);
+ next if $file eq '';
+ $file =~ m/^($check_regex) # checksum
+ [ \t]+(\d+) # size
+ [ \t]+([0-9a-zA-Z][-+:.,=0-9a-zA-Z_~]+)# filename
+ $/x
+ || error(_g("Files field contains bad line `%s'"), $file);
+ ($checksum{$3},$size{$3},$file) = ($1,$2,$3);
local $_ = $file;
error(_g("Files field contains invalid filename `%s'"), $file)
@@ -1124,19 +1131,8 @@ if ($opmode eq 'build') {
}
sub checkstats {
- my $dscdir = shift;
- my ($f) = @_;
- my @s;
- my $m;
- open(STDIN, "< $dscdir/$f") || syserr(_g("cannot read %s"), "$dscdir/$f");
- (@s = stat(STDIN)) || syserr(_g("cannot fstat %s"), "$dscdir/$f");
- $s[7] == $size{$f} || error(_g("file %s has size %s instead of expected %s"),
- $f, $s[7], $size{$f});
- $m= `md5sum`; $? && subprocerr("md5sum $f"); $m =~ s/\n$//;
- $m = readmd5sum( $m );
- $m eq $md5sum{$f} || error(_g("file %s has md5sum %s instead of expected %s"),
- $f, $m, $md5sum{$f});
- open(STDIN,"</dev/null") || &syserr(_g("reopen stdin from /dev/null"));
+ my ($dscdir, $f) = @_;
+ verifychecksum("$dscdir/$f", $checksum{$f}, $size{$f}, ".dsc")
}
sub erasedir {
@@ -1634,12 +1630,8 @@ sub addfile {
my ($fields, $filename)= @_;
$added_files{$filename}++ &&
internerr(_g("tried to add file `%s' twice"), $filename);
- stat($filename) || syserr(_g("could not stat output file `%s'"), $filename);
- my $size = (stat _)[7];
- my $md5sum= `md5sum <$filename`;
- $? && &subprocerr("md5sum $filename");
- $md5sum = readmd5sum( $md5sum );
- $fields->{'Files'}.= "\n $md5sum $size $filename";
+ my ($sum, $size) = getchecksum($checksum, $filename);
+ $fields->{'Files'}.= "\n $sum $size $filename";
}
# replace \ddd with their corresponding character, refuse \ddd > \377
--
1.5.3.8
Reply to: