#!/bin/sh
#
# shutdown -- wrapper script to prevent erroneous shutdowns via SSH
#
# Copyright © martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
# $Id: shutdown 299 2006-10-16 14:40:47Z madduck $
#
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
    fi
    if [ ! -x $EXEC ]; then
      echo "E: $ME: not an executable: $EXEC" >&2
      exit 3
    fi
    ;;
  *)
    echo "E: $ME: unsupported command: $CMD" >&2
    exit 1
    ;;
esac
ARGS="$@"

do_real_cmd()
{
  case "$ARGS" in
    (*--molly-guard-do-nothing*)
      ARGS0="${ARGS%% --molly-guard-do-nothing*}"
      ARGS1="${ARGS##*--molly-guard-do-nothing}"
      echo "$ME: would run: $EXEC $ARGS0 ${ARGS1# }"
      exit 0;;
    *) eval exec $EXEC "$ARGS";;
  esac
}

# 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*) do_real_cmd;;
  (shutdown\ *-h*) do_real_cmd;;
  (*--help*) do_real_cmd;;
  *) :;;
esac

HOSTNAME="$(hostname)"

sigh()
{
  echo "Good thing I asked; I won't $CMD $HOSTNAME ..."
  exit 2
}

trap 'echo;sigh' 1 2 3 9 10 12 15

echo "$ME: SSH session detected!"
echo -n "Please type in hostname of the machine to $CMD: "
read HOSTNAME_USER || :

[ "$HOSTNAME_USER" = "$HOSTNAME" ] || sigh

trap - 1 2 3 9 10 12 15

do_real_cmd
