[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] md5sum: Implemented --pedantic option to be more strict in verif
From: |
schoenfeld / in-medias-res |
Subject: |
[PATCH] md5sum: Implemented --pedantic option to be more strict in verification mode |
Date: |
Mon, 17 Nov 2008 21:27:03 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
>From 156d7e829da3ab9d895a275c2cd02e52388bcd0d Mon Sep 17 00:00:00 2001
From: Patrick Schoenfeld <address@hidden>
Date: Mon, 17 Nov 2008 20:54:08 +0100
Subject: [PATCH] md5sum: Implemented --pedantic option to be more strict in
verification mode
* md5sum: Implemented a --pedantic option in --check mode, which lets md5sum
bail out with a non-zero exit code, if one or more improperly formatted line
is found. Feature request by Dan Jacobson.
(http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=353911)
Signed-off-by: Patrick Schoenfeld <address@hidden>
---
The following patch misses tests. I would like to kindly ask if
someone else could add these. However I verified that these works:
Create testdata:
mkdir -p testdata
for i in $(seq 1 3); do echo $i > testdata/$i; done
md5sum testdata/*|sed '1s/^./Z/'|md5sum -c --pedantic -w
Expected Result: Warning about line 1, exit 1
md5sum testdata/*|sed '2s/^./Z/'|md5sum -c --pedantic -w
Expected Result: Warning about line 2, exit 1
md5sum testdata/*|sed 's/^./Z/'|md5sum -c --pedantic -w
Expected Result: Warn about all lines, moan that no properly formatted
line was found and exit 1.
md5sum testdata/*|md5sum -c --pedantic -w
Expected Result: All lines OK.
Please note that I'm still in process of copyright assignment.
Send a mail to address@hidden but got no reply yet.
NEWS | 4 ++++
doc/coreutils.texi | 6 ++++++
src/md5sum.c | 34 ++++++++++++++++++++++++++++++++--
3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/NEWS b/NEWS
index cbea67c..b0e2345 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,10 @@ GNU coreutils NEWS -*-
outline -*-
stat -f recognizes the Lustre file system type
+ md5sum now recognizes a new option --pedantic when verifying md5sums in a
file
+ (with --check) to let it return a non-zero exit code if one or more invalid
+ lines are found
+
** Bug fixes
seq 9223372036854775807 9223372036854775808 now prints only two numbers
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index 935129f..b9b629d 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -3484,6 +3484,12 @@ When verifying checksums, warn about improperly
formatted MD5 checksum lines.
This option is useful only if all but a few lines in the checked input
are valid.
address@hidden --pedantic
address@hidden --pedantic
address@hidden verifying MD5 checksums
+When verifying checksums, fail if one or more improperly formatted MD5 checksum
+line is found.
+
@end table
@exitstatus
diff --git a/src/md5sum.c b/src/md5sum.c
index 969cc71..89ffd49 100644
--- a/src/md5sum.c
+++ b/src/md5sum.c
@@ -121,12 +121,17 @@ static bool warn = false;
/* With --check, suppress the "OK" printed for each verified file. */
static bool quiet = false;
+/* With --check, exit with a non-zero return code, if any line is
+ improperly formatted. */
+static bool pedantic = false;
+
/* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
enum
{
STATUS_OPTION = CHAR_MAX + 1,
- QUIET_OPTION
+ QUIET_OPTION,
+ PEDANTIC_OPTION
};
static struct option const long_options[] =
@@ -137,6 +142,7 @@ static struct option const long_options[] =
{ "status", no_argument, NULL, STATUS_OPTION },
{ "text", no_argument, NULL, 't' },
{ "warn", no_argument, NULL, 'w' },
+ { "pedantic", no_argument, NULL, PEDANTIC_OPTION },
{ GETOPT_HELP_OPTION_DECL },
{ GETOPT_VERSION_OPTION_DECL },
{ NULL, 0, NULL, 0 }
@@ -184,6 +190,8 @@ The following three options are useful only when verifying
checksums:\n\
--quiet don't print OK for each successfully verified file\n\
--status don't output anything, status code shows success\n\
-w, --warn warn about improperly formatted checksum lines\n\
+ --pedantic return a non-zero exit code if one or more
improperly\n\
+ formatted checksume line is found\n\
\n\
"), stdout);
fputs (HELP_OPTION_DESCRIPTION, stdout);
@@ -428,6 +436,7 @@ digest_check (const char *checkfile_name)
{
FILE *checkfile_stream;
uintmax_t n_properly_formatted_lines = 0;
+ uintmax_t n_improperly_formatted_lines = 0;
uintmax_t n_mismatched_checksums = 0;
uintmax_t n_open_or_read_failures = 0;
unsigned char bin_buffer_unaligned[DIGEST_BIN_BYTES + DIGEST_ALIGN];
@@ -493,6 +502,8 @@ digest_check (const char *checkfile_name)
checkfile_name, line_number,
DIGEST_TYPE_STRING);
}
+
+ ++n_improperly_formatted_lines;
}
else
{
@@ -591,8 +602,17 @@ digest_check (const char *checkfile_name)
n_mismatched_checksums, n_computed_checksums);
}
}
- }
+ if (n_improperly_formatted_lines != 0)
+ {
+ if (pedantic)
+ {
+ /* Bail out if more then one improperly formatted line is found
+ and pedantic option is set */
+ exit(1);
+ }
+ }
+ }
return (n_properly_formatted_lines != 0
&& n_mismatched_checksums == 0
&& n_open_or_read_failures == 0);
@@ -645,6 +665,9 @@ main (int argc, char **argv)
warn = false;
quiet = true;
break;
+ case PEDANTIC_OPTION:
+ pedantic = true;
+ break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
default:
@@ -682,6 +705,13 @@ main (int argc, char **argv)
usage (EXIT_FAILURE);
}
+ if (pedantic & !do_check)
+ {
+ error (0, 0,
+ _("the --pedantic option is meaningful only when verifying checksums"));
+ usage (EXIT_FAILURE);
+ }
+
if (!O_BINARY && binary < 0)
binary = 0;
--
1.5.6.5
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] md5sum: Implemented --pedantic option to be more strict in verification mode,
schoenfeld / in-medias-res <=