#!/bin/sh # # Copyright (C) 2017-2019 Hamish Coleman # # Look up the given filename in the description file and confirm that # the checksum matches # # FIXME # - the description file is expected to be in the current dir # - does not handle description file entries with more than just the sha1 tag DESCRIPTIONS='Descriptions.txt' if [ "$1" = "--mv_on_fail" ]; then MV_ON_FAIL=yes shift elif [ "$1" = "--rm_on_fail" ]; then RM_ON_FAIL=yes shift fi FILE="$1" if [ -z "$FILE" ]; then echo "Need filename" 2>&1 exit 1 fi shift # The name of the Descriptions.txt entry to use CHECKNAME="$1" if [ -z "$CHECKNAME" ]; then # default to the same as the filename CHECKNAME="$FILE" fi do_exit_fail() { if [ "$MV_ON_FAIL" ]; then BADNAME="${FILE}.bad" echo "ERROR: moved file to $BADNAME" 2>&1 mv -f "$FILE" "$BADNAME" elif [ "$RM_ON_FAIL" ]; then echo "ERROR: removed file" 2>&1 rm -f "$FILE" fi exit 1 } if ! LINE=$(grep -E "^$CHECKNAME " "$DESCRIPTIONS"); then echo "Unknown file $CHECKNAME" 2>&1 do_exit_fail fi if [ ! -e "$FILE" ]; then echo "File $FILE does not exist" 2>&1 do_exit_fail fi SUM_FIELD=$(echo "$LINE" | awk -- '{print $2}') TYPE=$(echo "$SUM_FIELD" | cut -d: -f1) EXPECT=$(echo "$SUM_FIELD" | cut -d: -f2 |tr '[:upper:]' '[:lower:]') case "$TYPE" in sha1) GOT=$(sha1sum "$FILE" | cut -d" " -f1) ;; sha256) GOT=$(sha256sum "$FILE" | cut -d" " -f1) ;; *) echo "Unknown checksum type $TYPE for $CHECKNAME" 2>&1 do_exit_fail ;; esac if [ "$EXPECT" != "$GOT" ]; then echo "File $FILE failed checksum check" 2>&1 do_exit_fail fi exit 0