- (djm) Cleanup Redhat RPMs. Generate keys at runtime rather than install
   time, spec file cleanup.
diff --git a/contrib/redhat/sshd.init b/contrib/redhat/sshd.init
index cac91bb..487d128 100755
--- a/contrib/redhat/sshd.init
+++ b/contrib/redhat/sshd.init
@@ -17,44 +17,73 @@
 
 RETVAL=0
 
+# Some functions to make the below more readable
+KEYGEN=/usr/bin/ssh-keygen
+RSA_KEY=/etc/ssh/ssh_host_key
+DSA_KEY=/etc/ssh/ssh_host_dsa_key
+PID_FILE=/var/run/sshd.pid
+do_rsa_keygen() {
+	if $KEYGEN -R && ! test -f $RSA_KEY ; then
+		echo -n "Generating SSH RSA host key: "
+		if $KEYGEN -q -b 1024 -f $RSA_KEY -C '' -N '' >&/dev/null; then
+			success "RSA key generation"
+			echo
+		else
+			failure "RSA key generation"
+			echo
+			exit 1
+		fi
+	fi
+}
+do_dsa_keygen() {
+	if ! test -f $DSA_KEY ; then
+		echo -n "Generating SSH DSA host key: "
+		if $KEYGEN -q -d -b 1024 -f $DSA_KEY -C '' -N '' >&/dev/null; then
+			success "DSA key generation"
+			echo
+		else
+			failure "DSA key generation"
+			echo
+			exit 1
+		fi
+	fi
+}
+
 case "$1" in
-  start)
-	echo -n "Starting sshd: "
-	if [ ! -f /var/run/sshd.pid ] ; then
-	  case "`type -type success`" in
-	    function)
-	      /usr/sbin/sshd && success "sshd startup" || failure "sshd startup"
-	      RETVAL=$?
-	    ;;
-	    *)
-	      /usr/sbin/sshd && echo -n "sshd "
-	      RETVAL=$?
-	    ;;
-	  esac
-	  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sshd
-	fi
-	echo
-	;;
-  stop)
-	echo -n "Shutting down sshd: "
-	if [ -f /var/run/sshd.pid ] ; then
-		killproc sshd
-	fi
-	echo
-	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd
-	;;
-  restart)
-        $0 stop
-        $0 start
-	RETVAL=$?
-        ;;
-  status)
-        status sshd
-	RETVAL=$?
-        ;;
-  *)
-	echo "Usage: sshd {start|stop|restart|status}"
-	exit 1
+	start)
+		# Create keys if necessary
+		do_rsa_keygen;
+		do_dsa_keygen;
+		
+		echo -n "Starting sshd: "
+		if [ ! -f $PID_FILE ] ; then
+			daemon sshd
+			RETVAL=$?
+			touch /var/lock/subsys/sshd
+		fi
+		echo
+		;;
+	stop)
+		echo -n "Shutting down sshd: "
+		if [ -f $PID_FILE ] ; then
+			killproc sshd
+			[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd
+		fi
+		echo
+		;;
+	restart)
+		$0 stop
+		$0 start
+		RETVAL=$?
+		;;
+	status)
+		status sshd
+		RETVAL=$?
+		;;
+	*)
+		echo "Usage: sshd {start|stop|restart|status}"
+		exit 1
+		;;
 esac
 
 exit $RETVAL