randyk 2002/12/31 14:59:48 Modified: src/docs/1.0/os/win32 mpinstall src/docs/2.0/os/win32 mpinstall Log: added checksums check Revision Changes Path 1.2 +66 -3 modperl-docs/src/docs/1.0/os/win32/mpinstall Index: mpinstall =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/os/win32/mpinstall,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mpinstall 21 Dec 2002 07:26:16 -0000 1.1 +++ mpinstall 31 Dec 2002 22:59:48 -0000 1.2 @@ -13,6 +13,9 @@ use Compress::Zlib; use File::Copy; use Config; +use Safe; +use Digest::MD5; +use IO::File; die "This only works for Win32" unless $^O =~ /Win32/i; die "No mod_perl ppm package available for this Perl" if ($] < 5.006001); @@ -100,10 +103,12 @@ die 'Please specify an Apache directory' unless ($apache or $apache2); my $theoryx5 = 'http://theoryx5.uwinnipeg.ca'; -my ($ppd, $tgz, $ppdfile, $tgzfile); +my ($ppd, $tgz, $ppdfile, $tgzfile, $checksums); +my $cs = 'CHECKSUMS'; # set appropriate ppd and tar.gz files if ($] < 5.008) { + $checksums = $theoryx5 . '/ppmpackages/x86/' . $cs; if ($apache2) { $ppdfile = 'mod_perl-2.ppd'; $tgzfile = 'mod_perl-2.tar.gz'; @@ -111,7 +116,7 @@ $tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile; } else { - my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no'); + my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no'); if ($ans =~ /^n/i) { $ppdfile = 'mod_perl.ppd'; $tgzfile = 'mod_perl.tar.gz'; @@ -127,6 +132,7 @@ } } else { + $checksums = $theoryx5 . '/ppms/x86/' . $cs; if ($apache2) { $ppdfile = 'mod_perl.ppd'; $tgzfile = 'mod_perl.tar.gz'; @@ -150,6 +156,19 @@ getstore($tgz, $tgzfile); print " done!\n"; die "Failed to fetch $tgz" unless -e $tgzfile; +print "Fetching $checksums ..."; +getstore($checksums, $cs); +print " done!\n"; + +# check CHECKSUMS for the tar.gz file +if (-e $cs) { + unless (verifyMD5($tgzfile)) { + print qq{CHECKSUM check for "$tgzfile" failed.\n}; + } +} +else { + warn "Failed to fetch $checksums - will not verify CHECKSUMS."; +} # edit the ppd file to reflect a local installation my $old = $ppdfile . 'old'; @@ -205,7 +224,7 @@ # clean up, if desired my $ans = prompt("Remove temporary installation files from $tmp?", 'yes'); if ($ans =~ /^y/i) { - unlink ($ppdfile, $old, $tgzfile) + unlink ($ppdfile, $old, $tgzfile, $cs) or warn "Cannot unlink files from $tmp: $!"; } @@ -232,3 +251,47 @@ For more information, visit http://perl.apache.org/. END + +# routine to verify the CHECKSUMS for a file +# adapted from the MD5 check of CPAN.pm +sub verifyMD5 { + my $file = shift; + my $fh = IO::File->new; + my $cksum; + unless (open $fh, 'CHECKSUMS') { + warn "Could not open CHECKSUMS: $!"; + return; + } + local($/); + my $eval = <$fh>; + $eval =~ s/\015?\012/\n/g; + close $fh; + my $comp = Safe->new(); + $cksum = $comp->reval($eval); + if ($@) { + warn $@; + return; + } + my ($is, $should); + unless (open(FILE, $file)) { + warn "Cannot open $file: $!"; + return; + } + binmode(FILE); + unless ($is = Digest::MD5->new->addfile(*FILE)->hexdigest) { + warn "Could not compute checksum for $file: $!"; + close(FILE); + return; + } + close(FILE); + if ($should = $cksum->{$file}->{md5}) { + my $test = $is eq $should ? 1 : 0; + printf qq{Checksum for "$file" is %s\n}, + ($test == 1) ? 'OK.' : 'NOT OK.'; + return $test; + } + else { + warn "Checksum data for $file not present in CHECKSUMS.\n"; + return; + } +} 1.2 +66 -3 modperl-docs/src/docs/2.0/os/win32/mpinstall Index: mpinstall =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/2.0/os/win32/mpinstall,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mpinstall 21 Dec 2002 07:26:16 -0000 1.1 +++ mpinstall 31 Dec 2002 22:59:48 -0000 1.2 @@ -13,6 +13,9 @@ use Compress::Zlib; use File::Copy; use Config; +use Safe; +use Digest::MD5; +use IO::File; die "This only works for Win32" unless $^O =~ /Win32/i; die "No mod_perl ppm package available for this Perl" if ($] < 5.006001); @@ -100,10 +103,12 @@ die 'Please specify an Apache directory' unless ($apache or $apache2); my $theoryx5 = 'http://theoryx5.uwinnipeg.ca'; -my ($ppd, $tgz, $ppdfile, $tgzfile); +my ($ppd, $tgz, $ppdfile, $tgzfile, $checksums); +my $cs = 'CHECKSUMS'; # set appropriate ppd and tar.gz files if ($] < 5.008) { + $checksums = $theoryx5 . '/ppmpackages/x86/' . $cs; if ($apache2) { $ppdfile = 'mod_perl-2.ppd'; $tgzfile = 'mod_perl-2.tar.gz'; @@ -111,7 +116,7 @@ $tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile; } else { - my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no'); + my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no'); if ($ans =~ /^n/i) { $ppdfile = 'mod_perl.ppd'; $tgzfile = 'mod_perl.tar.gz'; @@ -127,6 +132,7 @@ } } else { + $checksums = $theoryx5 . '/ppms/x86/' . $cs; if ($apache2) { $ppdfile = 'mod_perl.ppd'; $tgzfile = 'mod_perl.tar.gz'; @@ -150,6 +156,19 @@ getstore($tgz, $tgzfile); print " done!\n"; die "Failed to fetch $tgz" unless -e $tgzfile; +print "Fetching $checksums ..."; +getstore($checksums, $cs); +print " done!\n"; + +# check CHECKSUMS for the tar.gz file +if (-e $cs) { + unless (verifyMD5($tgzfile)) { + print qq{CHECKSUM check for "$tgzfile" failed.\n}; + } +} +else { + warn "Failed to fetch $checksums - will not verify CHECKSUMS."; +} # edit the ppd file to reflect a local installation my $old = $ppdfile . 'old'; @@ -205,7 +224,7 @@ # clean up, if desired my $ans = prompt("Remove temporary installation files from $tmp?", 'yes'); if ($ans =~ /^y/i) { - unlink ($ppdfile, $old, $tgzfile) + unlink ($ppdfile, $old, $tgzfile, $cs) or warn "Cannot unlink files from $tmp: $!"; } @@ -232,3 +251,47 @@ For more information, visit http://perl.apache.org/. END + +# routine to verify the CHECKSUMS for a file +# adapted from the MD5 check of CPAN.pm +sub verifyMD5 { + my $file = shift; + my $fh = IO::File->new; + my $cksum; + unless (open $fh, 'CHECKSUMS') { + warn "Could not open CHECKSUMS: $!"; + return; + } + local($/); + my $eval = <$fh>; + $eval =~ s/\015?\012/\n/g; + close $fh; + my $comp = Safe->new(); + $cksum = $comp->reval($eval); + if ($@) { + warn $@; + return; + } + my ($is, $should); + unless (open(FILE, $file)) { + warn "Cannot open $file: $!"; + return; + } + binmode(FILE); + unless ($is = Digest::MD5->new->addfile(*FILE)->hexdigest) { + warn "Could not compute checksum for $file: $!"; + close(FILE); + return; + } + close(FILE); + if ($should = $cksum->{$file}->{md5}) { + my $test = $is eq $should ? 1 : 0; + printf qq{Checksum for "$file" is %s\n}, + ($test == 1) ? 'OK.' : 'NOT OK.'; + return $test; + } + else { + warn "Checksum data for $file not present in CHECKSUMS.\n"; + return; + } +}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]