md5/shaNsum: make -c support a list of files
function old new delta md5_sha1_sum_main 455 473 +18 Signed-off-by: Lauri Kasanen <curaga@operamail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
066f399566
commit
e3f805ccc3
@ -7,12 +7,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//usage:#define md5sum_trivial_usage
|
//usage:#define md5sum_trivial_usage
|
||||||
//usage: "[FILE]..."
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum -c [-sw] [FILE]")
|
|
||||||
//usage:#define md5sum_full_usage "\n\n"
|
//usage:#define md5sum_full_usage "\n\n"
|
||||||
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
|
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
||||||
//usage: "\n -c Check sums against given list"
|
//usage: "\n -c Check sums against list in FILEs"
|
||||||
//usage: "\n -s Don't output anything, status code shows success"
|
//usage: "\n -s Don't output anything, status code shows success"
|
||||||
//usage: "\n -w Warn about improperly formatted checksum lines"
|
//usage: "\n -w Warn about improperly formatted checksum lines"
|
||||||
//usage: )
|
//usage: )
|
||||||
@ -28,34 +27,31 @@
|
|||||||
//usage: "^D\n"
|
//usage: "^D\n"
|
||||||
//usage:
|
//usage:
|
||||||
//usage:#define sha1sum_trivial_usage
|
//usage:#define sha1sum_trivial_usage
|
||||||
//usage: "[FILE]..."
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum -c [-sw] [FILE]")
|
|
||||||
//usage:#define sha1sum_full_usage "\n\n"
|
//usage:#define sha1sum_full_usage "\n\n"
|
||||||
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
|
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
||||||
//usage: "\n -c Check sums against given list"
|
//usage: "\n -c Check sums against list in FILEs"
|
||||||
//usage: "\n -s Don't output anything, status code shows success"
|
//usage: "\n -s Don't output anything, status code shows success"
|
||||||
//usage: "\n -w Warn about improperly formatted checksum lines"
|
//usage: "\n -w Warn about improperly formatted checksum lines"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage:
|
//usage:
|
||||||
//usage:#define sha256sum_trivial_usage
|
//usage:#define sha256sum_trivial_usage
|
||||||
//usage: "[FILE]..."
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha256sum -c [-sw] [FILE]")
|
|
||||||
//usage:#define sha256sum_full_usage "\n\n"
|
//usage:#define sha256sum_full_usage "\n\n"
|
||||||
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
|
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
||||||
//usage: "\n -c Check sums against given list"
|
//usage: "\n -c Check sums against list in FILEs"
|
||||||
//usage: "\n -s Don't output anything, status code shows success"
|
//usage: "\n -s Don't output anything, status code shows success"
|
||||||
//usage: "\n -w Warn about improperly formatted checksum lines"
|
//usage: "\n -w Warn about improperly formatted checksum lines"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage:
|
//usage:
|
||||||
//usage:#define sha512sum_trivial_usage
|
//usage:#define sha512sum_trivial_usage
|
||||||
//usage: "[FILE]..."
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha512sum -c [-sw] [FILE]")
|
|
||||||
//usage:#define sha512sum_full_usage "\n\n"
|
//usage:#define sha512sum_full_usage "\n\n"
|
||||||
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
|
//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
|
||||||
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
|
||||||
//usage: "\n -c Check sums against given list"
|
//usage: "\n -c Check sums against list in FILEs"
|
||||||
//usage: "\n -s Don't output anything, status code shows success"
|
//usage: "\n -s Don't output anything, status code shows success"
|
||||||
//usage: "\n -w Warn about improperly formatted checksum lines"
|
//usage: "\n -w Warn about improperly formatted checksum lines"
|
||||||
//usage: )
|
//usage: )
|
||||||
@ -95,7 +91,7 @@ static uint8_t *hash_file(const char *filename)
|
|||||||
sha1_ctx_t sha1;
|
sha1_ctx_t sha1;
|
||||||
md5_ctx_t md5;
|
md5_ctx_t md5;
|
||||||
} context;
|
} context;
|
||||||
uint8_t *hash_value = NULL;
|
uint8_t *hash_value;
|
||||||
void FAST_FUNC (*update)(void*, const void*, size_t);
|
void FAST_FUNC (*update)(void*, const void*, size_t);
|
||||||
void FAST_FUNC (*final)(void*, void*);
|
void FAST_FUNC (*final)(void*, void*);
|
||||||
char hash_algo;
|
char hash_algo;
|
||||||
@ -137,6 +133,7 @@ static uint8_t *hash_file(const char *filename)
|
|||||||
while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
|
while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
|
||||||
update(&context, in_buf, count);
|
update(&context, in_buf, count);
|
||||||
}
|
}
|
||||||
|
hash_value = NULL;
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
final(&context, in_buf);
|
final(&context, in_buf);
|
||||||
hash_value = hash_bin_to_hex(in_buf, hash_len);
|
hash_value = hash_bin_to_hex(in_buf, hash_len);
|
||||||
@ -178,66 +175,58 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
|
do {
|
||||||
FILE *pre_computed_stream;
|
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
|
||||||
int count_total = 0;
|
FILE *pre_computed_stream;
|
||||||
int count_failed = 0;
|
char *line;
|
||||||
char *line;
|
int count_total = 0;
|
||||||
|
int count_failed = 0;
|
||||||
|
|
||||||
if (argv[1]) {
|
pre_computed_stream = xfopen_stdin(*argv);
|
||||||
bb_error_msg_and_die("only one argument may be specified with -c");
|
|
||||||
}
|
|
||||||
|
|
||||||
pre_computed_stream = xfopen_stdin(argv[0]);
|
while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
|
||||||
|
uint8_t *hash_value;
|
||||||
|
char *filename_ptr;
|
||||||
|
|
||||||
while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
|
count_total++;
|
||||||
uint8_t *hash_value;
|
filename_ptr = strstr(line, " ");
|
||||||
char *filename_ptr;
|
/* handle format for binary checksums */
|
||||||
|
if (filename_ptr == NULL) {
|
||||||
count_total++;
|
filename_ptr = strstr(line, " *");
|
||||||
filename_ptr = strstr(line, " ");
|
|
||||||
/* handle format for binary checksums */
|
|
||||||
if (filename_ptr == NULL) {
|
|
||||||
filename_ptr = strstr(line, " *");
|
|
||||||
}
|
|
||||||
if (filename_ptr == NULL) {
|
|
||||||
if (flags & FLAG_WARN) {
|
|
||||||
bb_error_msg("invalid format");
|
|
||||||
}
|
}
|
||||||
count_failed++;
|
if (filename_ptr == NULL) {
|
||||||
return_value = EXIT_FAILURE;
|
if (flags & FLAG_WARN) {
|
||||||
|
bb_error_msg("invalid format");
|
||||||
|
}
|
||||||
|
count_failed++;
|
||||||
|
return_value = EXIT_FAILURE;
|
||||||
|
free(line);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*filename_ptr = '\0';
|
||||||
|
filename_ptr += 2;
|
||||||
|
|
||||||
|
hash_value = hash_file(filename_ptr);
|
||||||
|
|
||||||
|
if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
|
||||||
|
if (!(flags & FLAG_SILENT))
|
||||||
|
printf("%s: OK\n", filename_ptr);
|
||||||
|
} else {
|
||||||
|
if (!(flags & FLAG_SILENT))
|
||||||
|
printf("%s: FAILED\n", filename_ptr);
|
||||||
|
count_failed++;
|
||||||
|
return_value = EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
/* possible free(NULL) */
|
||||||
|
free(hash_value);
|
||||||
free(line);
|
free(line);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
*filename_ptr = '\0';
|
if (count_failed && !(flags & FLAG_SILENT)) {
|
||||||
filename_ptr += 2;
|
bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
|
||||||
|
count_failed, count_total);
|
||||||
hash_value = hash_file(filename_ptr);
|
|
||||||
|
|
||||||
if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
|
|
||||||
if (!(flags & FLAG_SILENT))
|
|
||||||
printf("%s: OK\n", filename_ptr);
|
|
||||||
} else {
|
|
||||||
if (!(flags & FLAG_SILENT))
|
|
||||||
printf("%s: FAILED\n", filename_ptr);
|
|
||||||
count_failed++;
|
|
||||||
return_value = EXIT_FAILURE;
|
|
||||||
}
|
}
|
||||||
/* possible free(NULL) */
|
fclose_if_not_stdin(pre_computed_stream);
|
||||||
free(hash_value);
|
} else {
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
if (count_failed && !(flags & FLAG_SILENT)) {
|
|
||||||
bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
|
|
||||||
count_failed, count_total);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
if (fclose_if_not_stdin(pre_computed_stream) == EOF) {
|
|
||||||
bb_perror_msg_and_die("can't close file %s", file_ptr);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
} else {
|
|
||||||
do {
|
|
||||||
uint8_t *hash_value = hash_file(*argv);
|
uint8_t *hash_value = hash_file(*argv);
|
||||||
if (hash_value == NULL) {
|
if (hash_value == NULL) {
|
||||||
return_value = EXIT_FAILURE;
|
return_value = EXIT_FAILURE;
|
||||||
@ -245,7 +234,8 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
printf("%s %s\n", hash_value, *argv);
|
printf("%s %s\n", hash_value, *argv);
|
||||||
free(hash_value);
|
free(hash_value);
|
||||||
}
|
}
|
||||||
} while (*++argv);
|
}
|
||||||
}
|
} while (*++argv);
|
||||||
|
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user