#!/usr/sbin/openrc-run

description="OpenBSD Secure Shell server"

: ${SSHD_CONFDIR:=/etc/ssh}
: ${SSHD_CONFIG:=${SSHD_CONFDIR}/sshd_config}
: ${SSHD_PIDFILE:=/run/sshd.pid}
: ${SSHD_BINARY:=/usr/sbin/sshd}

command="${SSHD_BINARY}"

extra_commands="checkconfig"
extra_started_commands="reload"

depend() {
	use logger entropy
	after rsyslog
}

run_by_init() {
	[ -n "${RC_RUNLEVEL:-}" ]
}

check_for_no_start() {
	if [ -e /etc/ssh/sshd_not_to_be_run ]; then
		if ! run_by_init; then
			einfo "OpenBSD Secure Shell server not in use (/etc/ssh/sshd_not_to_be_run)"
		fi
		return 1
	fi
	return 0
}

check_dev_null() {
	if [ ! -c /dev/null ]; then
		eerror "/dev/null is not a character device!"
		return 1
	fi
	return 0
}

check_privsep_dir() {
	if [ ! -d /run/sshd ]; then
		mkdir /run/sshd
		chmod 0755 /run/sshd
	fi
}

checkconfig() {
	if [ -e /etc/ssh/sshd_not_to_be_run ]; then
		return 0
	fi
	[ -f /etc/default/ssh ] && . /etc/default/ssh
	"${command}" ${SSHD_OPTS:-} -f "${SSHD_CONFIG}" -t
}

start() {
	[ -x "$command" ] || return 1
	( "$command" -\? 2>&1 | grep -q OpenSSH ) 2>/dev/null || return 1
	[ -f /etc/default/ssh ] && . /etc/default/ssh

	check_privsep_dir || return 1
	check_dev_null || return 1
	checkconfig || return 1

	if ! check_for_no_start; then
		return 0
	fi

	ebegin "Starting ${RC_SVCNAME}"
	start-stop-daemon -S -p "${SSHD_PIDFILE}" \
		-x "${command}" -- ${SSHD_OPTS:-} -f "${SSHD_CONFIG}"
	eend $?
}

stop() {
	ebegin "Stopping ${RC_SVCNAME}"
	start-stop-daemon -K -p "${SSHD_PIDFILE}" -x "${command}"
	eend $?
}

reload() {
	check_for_no_start || return 0
	checkconfig || return 1
	ebegin "Reloading ${RC_SVCNAME}"
	start-stop-daemon -K -s HUP -p "${SSHD_PIDFILE}"
	eend $?
}
