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

CAT=/usr/bin/cat
KILL=/usr/bin/kill

prefix=%%openSSHDir%%
etcdir=%%configDir%%
piddir=%%pidDir%%

SSHD=$prefix/sbin/sshd
PIDFILE=$piddir/sshd.pid
SSH_KEYGEN=$prefix/bin/ssh-keygen
HOST_KEY_RSA1=$etcdir/ssh_host_key
HOST_KEY_DSA=$etcdir/ssh_host_dsa_key
HOST_KEY_RSA=$etcdir/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
