groups: make it NOEXEC
[oweals/busybox.git] / coreutils / md5_sha1_sum.c
index d3d294de972e511b1dd719316b45e80b3240be18..53fd4d1a8bfc8c5ecfed9dcb1d2b435d0faae329 100644 (file)
@@ -6,6 +6,60 @@
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 
+//usage:#define md5sum_trivial_usage
+//usage:       "[FILE]..."
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: md5sum -c [-sw] [FILE]")
+//usage:#define md5sum_full_usage "\n\n"
+//usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
+//usage:     "\n       -c      Check sums against given list"
+//usage:     "\n       -s      Don't output anything, status code shows success"
+//usage:     "\n       -w      Warn about improperly formatted checksum lines"
+//usage:       )
+//usage:
+//usage:#define md5sum_example_usage
+//usage:       "$ md5sum < busybox\n"
+//usage:       "6fd11e98b98a58f64ff3398d7b324003\n"
+//usage:       "$ md5sum busybox\n"
+//usage:       "6fd11e98b98a58f64ff3398d7b324003  busybox\n"
+//usage:       "$ md5sum -c -\n"
+//usage:       "6fd11e98b98a58f64ff3398d7b324003  busybox\n"
+//usage:       "busybox: OK\n"
+//usage:       "^D\n"
+//usage:
+//usage:#define sha1sum_trivial_usage
+//usage:       "[FILE]..."
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha1sum -c [-sw] [FILE]")
+//usage:#define sha1sum_full_usage "\n\n"
+//usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
+//usage:     "\n       -c      Check sums against given list"
+//usage:     "\n       -s      Don't output anything, status code shows success"
+//usage:     "\n       -w      Warn about improperly formatted checksum lines"
+//usage:       )
+//usage:
+//usage:#define sha256sum_trivial_usage
+//usage:       "[FILE]..."
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha256sum -c [-sw] [FILE]")
+//usage:#define sha256sum_full_usage "\n\n"
+//usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
+//usage:     "\n       -c      Check sums against given list"
+//usage:     "\n       -s      Don't output anything, status code shows success"
+//usage:     "\n       -w      Warn about improperly formatted checksum lines"
+//usage:       )
+//usage:
+//usage:#define sha512sum_trivial_usage
+//usage:       "[FILE]..."
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha512sum -c [-sw] [FILE]")
+//usage:#define sha512sum_full_usage "\n\n"
+//usage:       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
+//usage:       IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
+//usage:     "\n       -c      Check sums against given list"
+//usage:     "\n       -s      Don't output anything, status code shows success"
+//usage:     "\n       -w      Warn about improperly formatted checksum lines"
+//usage:       )
+
 #include "libbb.h"
 
 /* This is a NOEXEC applet. Be very careful! */
@@ -18,9 +72,9 @@ enum {
        HASH_SHA512 = '5',
 };
 
-#define FLAG_SILENT    1
-#define FLAG_CHECK     2
-#define FLAG_WARN      4
+#define FLAG_SILENT  1
+#define FLAG_CHECK   2
+#define FLAG_WARN    4
 
 /* This might be useful elsewhere */
 static unsigned char *hash_bin_to_hex(unsigned char *hash_value,
@@ -42,7 +96,6 @@ static uint8_t *hash_file(const char *filename)
                md5_ctx_t md5;
        } context;
        uint8_t *hash_value = NULL;
-       RESERVE_CONFIG_UBUFFER(in_buf, 4096);
        void FAST_FUNC (*update)(void*, const void*, size_t);
        void FAST_FUNC (*final)(void*, void*);
        char hash_algo;
@@ -54,7 +107,7 @@ static uint8_t *hash_file(const char *filename)
 
        hash_algo = applet_name[3];
 
-       /* figure specific hash algorithims */
+       /* figure specific hash algorithms */
        if (ENABLE_MD5SUM && hash_algo == HASH_MD5) {
                md5_begin(&context.md5);
                update = (void*)md5_hash;
@@ -79,17 +132,18 @@ static uint8_t *hash_file(const char *filename)
                xfunc_die(); /* can't reach this */
        }
 
-       while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
-               update(&context, in_buf, count);
-       }
-
-       if (count == 0) {
-               final(&context, in_buf);
-               hash_value = hash_bin_to_hex(in_buf, hash_len);
+       {
+               RESERVE_CONFIG_UBUFFER(in_buf, 4096);
+               while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
+                       update(&context, in_buf, count);
+               }
+               if (count == 0) {
+                       final(&context, in_buf);
+                       hash_value = hash_bin_to_hex(in_buf, hash_len);
+               }
+               RELEASE_CONFIG_BUFFER(in_buf);
        }
 
-       RELEASE_CONFIG_BUFFER(in_buf);
-
        if (src_fd != STDIN_FILENO) {
                close(src_fd);
        }