#! /bin/sh
# Reload the OpenSSH server when an interface comes up, to allow it to start
# listening on new addresses.

set -e

# Don't bother to restart sshd when lo is configured.
if [ "$IFACE" = lo ]; then
	exit 0
fi

# Only run from ifup.
if [ "$MODE" != start ]; then
	exit 0
fi

# OpenSSH only cares about inet and inet6. Get ye gone, strange people
# still using ipx.
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != inet6 ]; then
	exit 0
fi

# Is /usr mounted?
if [ ! -e /usr/sbin/sshd ]; then
	exit 0
fi

if [ ! -f /var/run/sshd.pid ] || \
   [ "$(ps -p "$(cat /var/run/sshd.pid)" -o comm=)" != sshd ]; then
	exit 0
fi

case 'Ubuntu' in
    Ubuntu)
	# Both init script and Upstart job are present; we want to operate
	# on the Upstart job.
	stop ssh || true
	start ssh || true
	;;
    *)
	# We'd like to use 'reload' here, but it has some problems; see
	# #502444.
	if [ -x /usr/sbin/invoke-rc.d ]; then
		invoke-rc.d ssh restart >/dev/null 2>&1 || true
	else
		/etc/init.d/ssh restart >/dev/null 2>&1 || true
	fi
	;;
esac

exit 0
