#!/bin/sh
#
# Starts dropbear sshd.
#

echo "Top of dropbear init script"

# Allow a few customizations from a config file
test -r /etc/default/dropbear && . /etc/default/dropbear

start() {
	DROPBEAR_ARGS="$DROPBEAR_ARGS"

	echo -n "Starting dropbear sshd: "
	umask 077
	# Ensure host keys are changed when instance ID changes
	cirros-per instance remove-dropbear-host-keys -- rm -rf /etc/dropbear
	
	# Make sure dropbear directory exists
	if [ ! -d /etc/dropbear ]; then
		mkdir -p /etc/dropbear
	fi

	# Regenerate invalid or missing keys
	local ktype file
	for ktype in rsa dss ecdsa; do
		file="/etc/dropbear/dropbear_${ktype}_host_key"
		# -f = input file, -y = validate and print pubkey info
		if ! dropbearkey -f "$file" -y >/dev/null 2>&1; then
			if [ -e "$file" ]; then
				echo "Removing invalid key: $file"
				rm -f "$file"
			fi
			# -t = type (dss, rsa, ecdsa), -f = output file
			tmp="${file}.working.$$"
			if [ -e "$tmp" ]; then
				rm -f "$tmp" ||
					echo "WARN: failed to remove tmp file '$tmp'"
			fi
			dropbearkey -t "$ktype" -f "$tmp" >/dev/null 2>&1 &&
				mv "$tmp" "$file" || {
					echo "WARN: generating key of type $ktype failed!"
					rm -f "$tmp"
			}
		fi
	done
	start-stop-daemon -S -q -p /var/run/dropbear.pid \
		--exec /usr/sbin/dropbear -- $DROPBEAR_ARGS
	[ $? = 0 ] && echo "OK" || echo "FAIL"
}
stop() {
	echo -n "Stopping dropbear sshd: "
	start-stop-daemon -K -q -p /var/run/dropbear.pid
	[ $? = 0 ] && echo "OK" || echo "FAIL"
}
restart() {
	stop
	start
}

case "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  restart|reload)
  	restart
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $?
