]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
md5sum, sha*sum: also accept openssl checksum syntax
authorGuenter Knauf <lists@gknw.net>
Sat, 3 Oct 2009 21:24:26 +0000 (23:24 +0200)
committerJim Meyering <meyering@redhat.com>
Wed, 7 Oct 2009 07:31:27 +0000 (09:31 +0200)
* src/md5sum.c (split_3): Accept openssl checksum syntax, which
differs only by two spaces from that of the bsd checksum tools:
openssl: MD5(f)= d41d8cd98f00b204e9800998ecf8427e
bsd:     MD5 (f) = d41d8cd98f00b204e9800998ecf8427e

NEWS
src/md5sum.c
tests/misc/md5sum
tests/misc/sha1sum

diff --git a/NEWS b/NEWS
index d8e23c46e0b591c46fbd8108a04cb459cd01c137..ff5e9a2043c89df95e2532f12b8577bdc4c19783 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,13 @@ GNU coreutils NEWS                                    -*- outline -*-
 
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
+** Bug fixes
+
+** New features
+
+  md5sum --check now also accepts openssl-style checksums.
+  So do sha1sum, sha224sum, sha384sum and sha512sum.
+
 
 * Noteworthy changes in release 8.0 (2009-10-06) [beta]
 
index e004c5e91c1cc4146cfe46f08753f04222c064e7..aa2a144a75eb5e9e4d14be216bb32fe8927813e3 100644 (file)
@@ -251,11 +251,10 @@ static bool
 split_3 (char *s, size_t s_len,
          unsigned char **hex_digest, int *binary, char **file_name)
 {
-  size_t i;
   bool escaped_filename = false;
   size_t algo_name_len;
 
-  i = 0;
+  size_t i = 0;
   while (ISWHITE (s[i]))
     ++i;
 
@@ -263,11 +262,13 @@ split_3 (char *s, size_t s_len,
   algo_name_len = strlen (DIGEST_TYPE_STRING);
   if (strncmp (s + i, DIGEST_TYPE_STRING, algo_name_len) == 0)
     {
-      if (strncmp (s + i + algo_name_len, " (", 2) == 0)
+      if (s[i + algo_name_len] == ' ')
+        ++i;
+      if (s[i + algo_name_len] == '(')
         {
           *binary = 0;
-          return bsd_split_3 (s +      i + algo_name_len + 2,
-                              s_len - (i + algo_name_len + 2),
+          return bsd_split_3 (s +      i + algo_name_len + 1,
+                              s_len - (i + algo_name_len + 1),
                               hex_digest, file_name);
         }
     }
index 2fb024d16c447051d7e42dff07717612cb0048df..30edd9e7fb2166a0b9ad92ad44faac1247c650d4 100755 (executable)
@@ -67,6 +67,16 @@ my @Tests =
      ['check-bsd3', '--check', '--status',
                                 {IN=> {'f.md5' => "MD5 (f) = $degenerate\n"}},
                                 {AUX=> {f=> 'bar'}}, {EXIT=> 1}],
+     ['check-openssl', '--check', {IN=> {'f.sha1' => "SHA1(f)= $degenerate\n"}},
+                                {AUX=> {f=> ''}},
+                                {ERR=>"md5sum: f.sha1: no properly formatted "
+                                       . "MD5 checksum lines found\n"},
+                                {EXIT=> 1}],
+     ['check-openssl2', '--check', {IN=> {'f.md5' => "MD5(f)= $degenerate\n"}},
+                                {AUX=> {f=> ''}}, {OUT=>"f: OK\n"}],
+     ['check-openssl3', '--check', '--status',
+                                {IN=> {'f.md5' => "MD5(f)= $degenerate\n"}},
+                                {AUX=> {f=> 'bar'}}, {EXIT=> 1}],
      ['bsd-segv', '--check', {IN=> {'z' => "MD5 ("}}, {EXIT=> 1},
       {ERR=> "$prog: z: no properly formatted MD5 checksum lines found\n"}],
 
index 3f09abaaed67c9793e4135d19788b28bfda5ceff..d084204d0b05cfa9144a286a64d298fc92022199 100755 (executable)
@@ -60,6 +60,17 @@ my @Tests =
      ['check-bsd3', '--check', '--status',
                         {IN=> {'f.sha1' => "SHA1 (f) = $sha_degenerate\n"}},
                         {AUX=> {f=> 'bar'}}, {EXIT=> 1}],
+     ['check-openssl', '--check', {IN=> {'f.md5' => "MD5(f)= $sha_degenerate\n"}},
+                        {AUX=> {f=> ''}},
+                        {ERR=>"sha1sum: f.md5: no properly formatted "
+                          . "SHA1 checksum lines found\n"},
+                        {EXIT=> 1}],
+     ['check-openssl2', '--check',
+                        {IN=> {'f.sha1' => "SHA1(f)= $sha_degenerate\n"}},
+                        {AUX=> {f=> ''}}, {OUT=>"f: OK\n"}],
+     ['check-openssl3', '--check', '--status',
+                        {IN=> {'f.sha1' => "SHA1(f)= $sha_degenerate\n"}},
+                        {AUX=> {f=> 'bar'}}, {EXIT=> 1}],
      ['bsd-segv', '--check', {IN=> {'z' => "SHA1 ("}}, {EXIT=> 1},
       {ERR=> "$prog: z: no properly formatted SHA1 checksum lines found\n"}],
     );