X-Git-Url: https://git.madduck.net/code/molly-guard.git/blobdiff_plain/0831febd10d68bf34d0d9d246497076a73fea2ae..b8333417c7987231f26948bfb1b8d0debffc3a00:/shutdown?ds=sidebyside diff --git a/shutdown b/shutdown index 0a6efd6..65fd374 100755 --- a/shutdown +++ b/shutdown @@ -9,31 +9,49 @@ # set -eu +ME=molly-guard + CMD="${0##*/}" EXEC="/sbin/$CMD" + case "$CMD" in halt|reboot|shutdown) + if [ ! -f $EXEC ]; then + echo "E: $ME: not a regular file: $EXEC" >&2 + exit 4 if [ ! -x $EXEC ]; then - echo "E: not an executable: $EXEC" >&2 + echo "E: $ME: not an executable: $EXEC" >&2 exit 3 fi ;; *) - echo "E: unsupported command: $CMD" >&2 + echo "E: $ME: unsupported command: $CMD" >&2 exit 1 ;; esac +ARGS="$@" + +do_real_cmd() +{ + exec $EXEC "$ARGS" +} + +# require $SSH_CONNECTION to be set, indicates an SSH session +[ -n "${SSH_CONNECTION:-}" ] || do_real_cmd +# require an interactive terminal connected to stdin +test -t 0 || do_real_cmd +# pass through help commands +case "$CMD $ARGS" in + 'shutdown*-c'|'*-h') do_real_cmd;; + *) :;; +esac -if [ -n "${SSH_CONNECTION:-}" ] && test -t 0 && [ "${1:-}" != '--help' ]; then - echo -n "SSH session detected, type in hostname of the machine to $CMD: " - read HOSTNAME_USER +echo -n "$ME: SSH session detected, type in hostname of the machine to $CMD: " +read HOSTNAME_USER - HOSTNAME="$(hostname)" +HOSTNAME="$(hostname)" - if [ "$HOSTNAME_USER" != "$HOSTNAME" ]; then - echo "Good thing I asked; I won't $CMD $HOSTNAME ..." - exit 2 - fi +if [ "$HOSTNAME_USER" != "$HOSTNAME" ]; then + echo "Good thing I asked; I won't $CMD $HOSTNAME ..." + exit 2 fi - -exec $EXEC "$@"