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

AWK=/usr/bin/awk
CAT=/usr/bin/cat
KILL=/usr/bin/kill
PS=/usr/bin/ps
XARGS=/usr/bin/xargs

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

killproc() {
   _procname=$1
   _signal=$2
   ${PS} -u root | ${AWK} '/'"$_procname"'$/ {print $1}' | ${XARGS} ${KILL}
}


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, killing using alternate method"
        killproc sshd TERM
    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
