diff options
author | unknown <mwagner@here.mwagner.org> | 2004-06-18 14:57:42 -0500 |
---|---|---|
committer | unknown <mwagner@here.mwagner.org> | 2004-06-18 14:57:42 -0500 |
commit | 9c5ba5c7b55bf89e548c64d4c5ab4ec590c47588 (patch) | |
tree | 5668a8d25039e71cc0d2e8e1af1c5034cd2f06d7 /Build-tools | |
parent | 5ce2792f9f908b7446e2169fc2a9a0a1d0b97019 (diff) | |
download | mariadb-git-9c5ba5c7b55bf89e548c64d4c5ab4ec590c47588.tar.gz |
my_md5sum:
new file, simulates 'md5sum' as a perl script
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'Build-tools')
-rwxr-xr-x | Build-tools/my_md5sum | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Build-tools/my_md5sum b/Build-tools/my_md5sum new file mode 100755 index 00000000000..d58a8bb7200 --- /dev/null +++ b/Build-tools/my_md5sum @@ -0,0 +1,123 @@ +#!/usr/bin/perl +# +# my_md5sum +# +# Script to clone the 'md5sum' command found on modern systems, since that +# command is not always found on all systems. +# +# Use the "--help" option for more info! +# +# Written by Matt Wagner <matt@mysql.com> +# +use strict; +use Digest::MD5; +use Getopt::Long; + +my $VER= "1.0"; + +# +# Strip the leading path info off the program name ($0). We want 'my_md5sum' +# not './my_md5sum'. +# +$0=~ s/^.*\/(.+)$/$1/; + +my ($opt_check, $opt_help)= undef; + +GetOptions( + "check|c" => \$opt_check, + "help|h" => \$opt_help, + ) || usage(); + +# +# Put all the [file1 file2 file3 ...]'s into an array +# +my @files = @ARGV; + +# +# Give the "--help" text if: +# - "--help|-h" was specified +# - The number of files given as arguments is nil +# - The "--check|-c" option is used with more than one [file] argument +# +usage() if $opt_help || $#files == -1 || ($opt_check && $#files > 0); + +# If "--check|-c", then go into checking +if ($opt_check) +{ + open (CHECKFILE, $files[0]) or die "$files[0]: $!"; + + while (<CHECKFILE>) + { + # + # Goto the next line in the file if it does not match a typical + # digest line like: + # + # f1007efa2c72daa693981ec764cdeaca Bootstrap + # + next if $_!~ m/^([a-z0-9]{32})\s+(.+)$/; + + # Collect the trappings from the above regex + my $checksum= $1; + my $checkfile= $2; + + # Generate a fresh MD5 for the file in question + my $digest= &mkmd5($checkfile); + + # Check the fresh MD5 against what is recorded in the file + # Print an error message if they don't match + print "$0: MD5 check failed for '$checkfile'\n" if $digest ne $checksum; + } +} +# Else generate the MD5 digest to STDOUT +else +{ + foreach my $file (@files) + { + my $digest= &mkmd5($file); + + print "$digest $file\n"; + } +} + + +# +# This routine generates the MD5 digest of a file +# +sub mkmd5 +{ + my $file= shift; + + open (FILE, $file) or die "$file: $!"; + binmode(FILE); + + my $digest= Digest::MD5->new->addfile(*FILE)->hexdigest; + + close FILE; + + return $digest; +} + +# +# Print the help text +# +sub usage +{ + print <<EOF; + +$0 version $VER by Matt Wagner <matt\@mysql.com> + +Usage: +$0 [-c [file]] | [file1...] +Generates or checks MD5 message digests. + +Options: +-c, --check Check message digests (default is generate) +-h, --help Display this text and exit + +The input for -c should be the list of message digests and file names that is +printed on STDOUT by this program when it generates digests. + +EOF + + exit(0); +} |