You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
#!/bin/bash
|
|
|
|
FILE="${FILE:-canary.txt}"
|
|
SALT="${CANARY_SALT_FILE:-canary.salt}"
|
|
|
|
die() {
|
|
if [[ -z "$1" ]]; then
|
|
>&2 echo "Fatal error"
|
|
else
|
|
>&2 echo "Fatal error: $*"
|
|
fi
|
|
\exit 1
|
|
}
|
|
|
|
hash-extra() (
|
|
local sep=
|
|
case "$1" in
|
|
-sec) sep=1
|
|
shift ;;
|
|
*) ;;
|
|
esac
|
|
local salt_file="$1"
|
|
local tag="${2:-"tagged"}"
|
|
if head -c 1 "$salt_file" >/dev/null; then
|
|
[[ -z "$sep" ]] || printf '\n---- extra tags (via %s) ----\n' "$salt_file"
|
|
{ echo -n "$tag: " && \
|
|
sha256sum - "$salt_file" | sha256sum | grep -o '[^- ]*'
|
|
} || die "Failed to write location hash to output"
|
|
else
|
|
die "Specified salt file '$salt_file' cannot be read: $?"
|
|
fi
|
|
)
|
|
|
|
echo "" > $FILE || die "Cannot write to file '$FILE'"
|
|
echo "---- $(date -u) ----" >> $FILE || die "Cannot append to file '$FILE'"
|
|
echo "$1" >> $FILE || die "Cannot write message: '$1', to '$FILE'"
|
|
[[ "$CANARY_ADD_LOCATION" != 0 ]] && eval-with-aliases 'ip-ext 2>/dev/null' | hash-extra -sec "$SALT" "Source location" >> "$FILE" || >&1 echo "[!] Warning: Asked to add location, but failed to hash extra: $?, ignoring"
|
|
#sha256sum |
|
|
echo "" >> $FILE || die "Cannot append to file '$FILE'"
|
|
|
|
gpg --armor --sign "$FILE" || die "GPG signing failed"
|
|
cat $FILE.asc >> "$FILE" || die "Failed to append signed message (tmp '${FILE}.asc') to output '$FILE'"
|
|
|
|
rm $FILE.asc || die "failed to remove temporary signed message file '${FILE}.asc'"
|
|
|
|
\exit 0
|