#!/sbin/sh
# Donated code that was put under PD license.
#
# Stripped PRNGd out of it for the time being.

umask 022

CAT=@CAT@
KILL=@KILL@

prefix=@prefix@
sysconfdir=@sysconfdir@
piddir=@piddir@

SSHD=$prefix/sbin/sshd
PIDFILE=$piddir/sshd.pid
SSH_KEYGEN=$prefix/bin/ssh-keygen
HOST_KEY_RSA1=$sysconfdir/ssh_host_key
HOST_KEY_DSA=$sysconfdir/ssh_host_dsa_key
HOST_KEY_RSA=$sysconfdir/ssh_host_rsa_key


checkkeys() {
    if [ ! -f $HOST_KEY_RSA1 ]; then
	${SSH_KEYGEN} -t rsa1 -f ${HOST_KEY_RSA1} -N ""
    fi
    if [ ! -f $HOST_KEY_DSA ]; then
	${SSH_KEYGEN} -t dsa -f ${HOST_KEY_DSA} -N ""
    fi
    if [ ! -f $HOST_KEY_RSA ]; then
	${SSH_KEYGEN} -t rsa -f ${HOST_KEY_RSA} -N ""
    fi
}

stop_service() {
    if [  -r $PIDFILE  -a  ! -z ${PIDFILE}  ]; then
	PID=`${CAT} ${PIDFILE}`
    fi
    if [  ${PID:=0} -gt 1 -a  ! "X$PID" = "X "  ]; then
	${KILL} ${PID}
    else
	echo "Unable to read PID file"
    fi
}

start_service() {
    # XXX We really should check if the service is already going, but
    # XXX we will opt out at this time. - Bal

    # Check to see if we have keys that need to be made
    checkkeys

    # Start SSHD
    echo "starting $SSHD... \c"         ; $SSHD

    sshd_rc=$?
    if [ $sshd_rc -ne 0 ]; then
	echo "$0: Error ${sshd_rc} starting ${SSHD}... bailing."
	exit $sshd_rc
    fi
    echo done.
}

case $1 in

'start')
    start_service
    ;;

'stop')
    stop_service
    ;;

'restart')
    stop_service
    start_service
    ;;

*)
    echo "$0:  usage:  $0 {start|stop|restart}"
    ;;
esac
