#!/sbin/runscript
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-misc/openssh/files/sshd.rc6.2,v 1.3 2011/12/04 10:08:19 swegener Exp $

extra_commands="checkconfig gen_keys"
extra_started_commands="reload"

depend() {
	use logger dns
	need net
}

SSHD_CONFDIR=${SSHD_CONFDIR:-/etc/ssh}
SSHD_PIDFILE=${SSHD_PIDFILE:-/var/run/${SVCNAME}.pid}
SSHD_BINARY=${SSHD_BINARY:-/usr/sbin/sshd}

checkconfig() {
	if [ ! -d /var/empty ] ; then
		mkdir -p /var/empty || return 1
	fi

	if [ ! -e "${SSHD_CONFDIR}"/sshd_config ] ; then
		eerror "You need an ${SSHD_CONFDIR}/sshd_config file to run sshd"
		eerror "There is a sample file in /usr/share/doc/openssh"
		return 1
	fi

	gen_keys || return 1

	[ "${SSHD_PIDFILE}" != "/var/run/sshd.pid" ] \
		&& SSHD_OPTS="${SSHD_OPTS} -o PidFile=${SSHD_PIDFILE}"
	[ "${SSHD_CONFDIR}" != "/etc/ssh" ] \
		&& SSHD_OPTS="${SSHD_OPTS} -f ${SSHD_CONFDIR}/sshd_config"

	"${SSHD_BINARY}" -t ${SSHD_OPTS} || return 1
}

gen_key() {
	local type=$1 key ks
	[ $# -eq 1 ] && ks="${type}_"
	key="${SSHD_CONFDIR}/ssh_host_${ks}key"
	if [ ! -e "${key}" ] ; then
		ebegin "Generating ${type} host key"
		ssh-keygen -t ${type} -f "${key}" -N ''
		eend $? || return $?
	fi
}

gen_keys() {
	if egrep -q '^[[:space:]]*Protocol[[:space:]]+.*1' "${SSHD_CONFDIR}"/sshd_config ; then
		gen_key rsa1 "" || return 1
	fi
	gen_key dsa && gen_key rsa && gen_key ecdsa
	return $?
}

start() {
	checkconfig || return 1

	ebegin "Starting ${SVCNAME}"
	start-stop-daemon --start --exec "${SSHD_BINARY}" \
	    --pidfile "${SSHD_PIDFILE}" \
	    -- ${SSHD_OPTS}
	eend $?
}

stop() {
	if [ "${RC_CMD}" = "restart" ] ; then
		checkconfig || return 1
	fi

	ebegin "Stopping ${SVCNAME}"
	start-stop-daemon --stop --exec "${SSHD_BINARY}" \
	    --pidfile "${SSHD_PIDFILE}" --quiet
	eend $?
}

reload() {
	checkconfig || return 1
	ebegin "Reloading ${SVCNAME}"
	start-stop-daemon --stop --signal HUP --oknodo \
	    --exec "${SSHD_BINARY}" --pidfile "${SSHD_PIDFILE}"
	eend $?
}
