From ef060e4e90d4e878791396c0e1b1caaa49e2e4f2 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Wed, 16 Sep 2020 17:00:25 -0400 Subject: implement command "cryptonomic" --- selfpublish.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/selfpublish.sh b/selfpublish.sh index 816a18d..25686a7 100644 --- a/selfpublish.sh +++ b/selfpublish.sh @@ -52,6 +52,7 @@ dependencies() { cat <= 2.4.46) +basez cgit curl fortune-mod @@ -59,6 +60,7 @@ fortunes-min gnupg (>= 2.2.14) libssl1.1 (>= 1.1.1d) openssl +ssh EOF } @@ -84,6 +86,11 @@ fmt_dependencies() fi } +control_file_file() +{ + printf 'File: %s %s\n' "$1" "$2" + sed -e 's/^/ /' +} SELF_VERSION='0.1' SELF_EXECUTABLE=$(realpath "$0") @@ -101,9 +108,65 @@ EOF cat <&2; exit 1; } + +b16_to_b32() +{ + printf %s "$1" | basez -x -d | basez -j -l | tr -d = +} + +get_domain() +{ + get_sshfp "$1" + + domain=$(printf %s.%s.%s "$sshfp_b32" "$DEFAULT_AUTH_TYPE" "$DOMAIN" | tail -c64) +} + +get_sshfp() +{ + [ -f "$1" ] || return + sshfp_b16=$(ssh-keygen -r . -f "$1" | sed -ne 's/^. IN SSHFP [0-9]* '"$HASH_TYPE"' //p') && + [ "$sshfp_b16" ] || die "could not determine ssh client fingerprint" + sshfp_b32=$(b16_to_b32 "$sshfp_b16") +} + +KEY_FILE=/etc/ssh/ssh_host_${DEFAULT_AUTH_TYPE}_key + +if [ $# = 0 -o "$1" = hostname ] +then + + get_domain "${KEY_FILE}".pub || exit + printf '%s\n' "$domain" + +elif [ "$1" = dyndns ] +then + set -- ssh -i "$KEY_FILE" dyndns@"$DOMAIN" + + if [ -r "$KEY_FILE" ] + then + "$@" + elif sudo -n true 2>/dev/null || groups | grep '\bsudo\b' + then + sudo -- "$@" + else + su -c "$(bash -c 'printf "%q " "$@"' bash "$@")" + + fi +else + echo "Usage: $0 [dyndns|hostname]" >&2 + exit 1 +fi +EOF + control_file_file /usr/bin/selfpublish.sh 755 < "$SELF_EXECUTABLE" echo } -- cgit v1.2.3