- (djm) Rework RedHat RPM files. Based on spec from Nalin
   Dahyabhai <nalin@redhat.com> and patches from
   Pekka Savola <pekkas@netcore.fi>
diff --git a/contrib/redhat/sshd.init b/contrib/redhat/sshd.init
index 86b040c..4ee8630 100755
--- a/contrib/redhat/sshd.init
+++ b/contrib/redhat/sshd.init
@@ -1,5 +1,5 @@
 #!/bin/bash
-
+#
 # Init file for OpenSSH server daemon
 #
 # chkconfig: 2345 55 25
@@ -15,149 +15,140 @@
 # source function library
 . /etc/rc.d/init.d/functions
 
+# pull in sysconfig settings
 [ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd
 
 RETVAL=0
+prog="sshd"
 
 # Some functions to make the below more readable
 KEYGEN=/usr/bin/ssh-keygen
+SSHD=/usr/sbin/sshd
 RSA1_KEY=/etc/ssh/ssh_host_key
 RSA_KEY=/etc/ssh/ssh_host_rsa_key
 DSA_KEY=/etc/ssh/ssh_host_dsa_key
 PID_FILE=/var/run/sshd.pid
-my_success() {
-  local msg
-  if [ $# -gt 1 ]; then
-    msg="$2"
-  else
-    msg="done"
-  fi
-  case "`type -type success`" in
-    function)
-      success "$1"
-    ;;
-    *)
-      echo -n "${msg}"
-    ;;
-  esac
-}
-my_failure() {
-  local msg
-  if [ $# -gt 1 ]; then
-    msg="$2"
-  else
-    msg="FAILED"
-  fi
-  case "`type -type failure`" in
-    function)
-      failure "$1"
-    ;;
-    *)
-      echo -n "${msg}"
-    ;;
-  esac
-}
+
 do_rsa1_keygen() {
-	if ! test -f $RSA1_KEY ; then
-		echo -n "Generating SSH1 RSA host key: "
+	if [ ! -s $RSA1_KEY ]; then
+		echo -n $"Generating SSH1 RSA host key: "
 		if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then
-			my_success "RSA1 key generation"
+			chmod 600 $RSA1_KEY
+			chmod 644 $RSA1_KEY.pub
+			success $"RSA1 key generation"
 			echo
 		else
-			my_failure "RSA1 key generation"
+			failure $"RSA1 key generation"
 			echo
 			exit 1
 		fi
 	fi
 }
-do_rsa_keygen() {
-	if ! test -f $RSA_KEY ; then
-		echo -n "Generating SSH2 RSA host key: "
-		if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then
-			my_success "RSA key generation"
-			echo
-		else
-			my_failure "RSA key generation"
-			echo
-			exit 1
-		fi
-	fi
-}
-do_dsa_keygen() {
-	if ! test -f $DSA_KEY ; then
-		echo -n "Generating SSH2 DSA host key: "
-		if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then
-			my_success "DSA key generation"
-			echo
-		else
-			my_failure "DSA key generation"
-			echo
-			exit 1
-		fi
-	fi
-}
-do_restart_sanity_check() {
-	sshd -t
-	RETVAL=$?
-	if [ ! "$RETVAL" = 0 ]; then
-		my_failure "Configuration file or keys"
-		echo
-		exit $RETVAL
-	fi
-}
 
+do_rsa_keygen() {
+	if [ ! -s $RSA_KEY ]; then
+		echo -n $"Generating SSH2 RSA host key: "
+		if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then
+			chmod 600 $RSA_KEY
+			chmod 644 $RSA_KEY.pub
+			success $"RSA key generation"
+			echo
+		else
+			failure $"RSA key generation"
+			echo
+			exit 1
+		fi
+	fi
+}
+
+do_dsa_keygen() {
+	if [ ! -s $DSA_KEY ]; then
+		echo -n $"Generating SSH2 DSA host key: "
+		if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then
+			chmod 600 $DSA_KEY
+			chmod 644 $DSA_KEY.pub
+			success $"DSA key generation"
+			echo
+		else
+			failure $"DSA key generation"
+			echo
+			exit 1
+		fi
+	fi
+}
+
+do_restart_sanity_check()
+{
+	$SSHD -t
+	RETVAL=$?
+	if [ ! "$RETVAL" = 0 ]; then
+		failure $"Configuration file or keys are invalid"
+		echo
+	fi
+}
+
+start()
+{
+	# Create keys if necessary
+	do_rsa1_keygen
+	do_rsa_keygen
+	do_dsa_keygen
+
+	echo -n $"Starting $prog:"
+	initlog -c "$SSHD $OPTIONS" && success || failure
+	RETVAL=$?
+	[ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd
+	echo
+}
+
+stop()
+{
+	echo -n $"Stopping $prog:"
+	killproc $SSHD -TERM
+	RETVAL=$?
+	[ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/sshd
+	echo
+}
+
+reload()
+{
+	echo -n $"Reloading $prog:"
+	killproc $SSHD -HUP
+	RETVAL=$?
+	echo
+}
 
 case "$1" in
 	start)
-		# Create keys if necessary
-		do_rsa1_keygen;
-		do_rsa_keygen;
-		do_dsa_keygen;
-		
-		echo -n "Starting sshd: "
-		if [ ! -f $PID_FILE ] ; then
-			sshd $OPTIONS
-			RETVAL=$?
-			if [ "$RETVAL" = "0" ] ; then
-				my_success "sshd startup" "sshd"
-				touch /var/lock/subsys/sshd
-			else
-				my_failure "sshd startup" ""
-			fi
-		fi
-		echo
+		start
 		;;
 	stop)
-		echo -n "Shutting down sshd: "
-		if [ -f $PID_FILE ] ; then
-			killproc sshd
-			RETVAL=$?
-			[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd
-		fi
-		echo
+		stop
 		;;
 	restart)
-		do_restart_sanity_check
-		$0 stop
-		$0 start
-		RETVAL=$?
+		stop
+		start
+		;;
+	reload)
+		reload
 		;;
 	condrestart)
 		if [ -f /var/lock/subsys/sshd ] ; then
 			do_restart_sanity_check
-			$0 stop
-			$0 start
-			RETVAL=$?
+			if [ "$RETVAL" = 0 ] ; then
+				stop
+				# avoid race
+				sleep 3
+				start
+			fi
 		fi
 		;;
 	status)
-		status sshd
+		status $SSHD
 		RETVAL=$?
 		;;
 	*)
-		echo "Usage: sshd {start|stop|restart|status|condrestart}"
-		exit 1
-		;;
+		echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
+		RETVAL=1
 esac
-
 exit $RETVAL