#!/bin/sh
# Begin $rc_base/init.d/sshd

# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten by Gerard Beekmans  - gerard@linuxfromscratch.org

#$LastChangedBy: bdubbs $
#$Date: 2006-04-15 17:34:16 -0500 (Sat, 15 Apr 2006) $

. /etc/sysconfig/rc
. $rc_functions

case "$1" in
    start)
	if [ ! -e "/etc/ssh/ssh_host_key" ]; then
		boot_mesg "Generating SSH host key..."
		ssh-keygen -qf /etc/ssh/ssh_host_key -N '' -t rsa1
		evaluate_retval
	fi

	for algo in rsa dsa ecdsa ed25519; do
		keyfile="/etc/ssh/ssh_host_${algo}_key"

		# If the key already exists, there is nothing to do.
		[ -e "${keyfile}" ] && continue

		case "${algo}" in
			rsa)
				algo="rsa1"
				;;
		esac

		boot_mesg "Generating SSH key (${algo})..."
		ssh-keygen -qf "${keyfile}" -N '' -t ${algo}
		evaluate_retval
	done

        [ -e "/var/ipfire/remote/enablessh" ] || exit 0 # SSH is not enabled
        boot_mesg "Starting SSH Server..."
        loadproc /usr/sbin/sshd 

        # Also prevent ssh from being killed by out of memory conditions
	(
		sleep 3
		pid=$(cat /var/run/sshd.pid 2>/dev/null)
		[ -n "${pid}" ] && echo "-16" > "/proc/${pid}/oom_score_adj"
	) &
        ;;

    stop)
        boot_mesg "Stopping SSH Server..."
        killproc /usr/sbin/sshd
        ;;

    reload)
        boot_mesg "Reloading SSH Server..."
        reloadproc /usr/sbin/sshd
        ;;

    restart)
        $0 stop
        sleep 1
        $0 start
        ;;

    status)
        statusproc /usr/sbin/sshd
        ;;

    *)
        echo "Usage: $0 {start|stop|reload|restart|status}"
        exit 1
        ;;
esac

# End $rc_base/init.d/sshd
