#! /bin/bash
#
# $Id: sshd.init,v 1.2 2001/04/27 05:50:50 tim Exp $
#
### BEGIN INIT INFO
# Provides:
# Required-Start: $network
# Required-Stop:
# Default-Start:  3 4 5
# Default-Stop:   0 1 2 6
# Description: sshd
#                Bring up/down the OpenSSH secure shell daemon.
### END INIT INFO
#
# Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>.
# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Modified for OpenLinux by Raymund Will <ray@caldera.de>

NAME=sshd
DAEMON=/usr/sbin/$NAME
# Hack-Alert(TM)!  This is necessary to get around the 'reload'-problem
# created by recent OpenSSH daemon/ssd combinations. See Caldera internal
# PR [linux/8278] for details...
PIDF=/var/run/$NAME.pid
NAME=$DAEMON

_status() {
  [ -z "$1" ] || local pidf="$1"
  local ret=-1
  local pid
  if [ -n "$pidf" ] && [  -r "$pidf" ]; then
    pid=$(head -1 $pidf)
  else
    pid=$(pidof $NAME)
  fi

  if [ ! -e $SVIlock ]; then
    # no lock-file => not started == stopped?
    ret=3
  elif { [ -n "$pidf" ] && [ ! -f "$pidf" ] } || [ -z "$pid" ]; then
    # pid-file given but not present or no pid => died, but was not stopped
    ret=2
  elif [ -r /proc/$pid/cmdline ] &&
       echo -ne $NAME'\000' | cmp -s - /proc/$pid/cmdline; then
    # pid-file given and present or pid found => check process...
    # but don't compare exe, as this will fail after an update!
    # compares OK => all's well, that ends well...
    ret=0
  else
    # no such process or exe does not match => stale pid-file or process died
    #   just recently...
    ret=1
  fi
  return $ret
}

# Source function library (and set vital variables).
. @SVIdir@/functions

case "$1" in
 start)
  [ ! -e $SVIlock ] || exit 0
  [ -x $DAEMON ] || exit 5
  SVIemptyConfig @sysconfdir@/sshd_config && exit 6

  if [ ! \( -f @sysconfdir@/ssh_host_key -a            \
            -f @sysconfdir@/ssh_host_key.pub \) -a     \
       ! \( -f @sysconfdir@/ssh_host_rsa_key -a        \
            -f @sysconfdir@/ssh_host_rsa_key.pub \) -a \
       ! \( -f @sysconfdir@/ssh_host_dsa_key -a        \
            -f @sysconfdir@/ssh_host_dsa_key.pub \) ]; then

    echo "$SVIsubsys: host key not initialized: skipped!"
    echo "$SVIsubsys: use ssh-host-keygen to generate one!"
    exit 6
  fi

  echo -n "Starting $SVIsubsys services: "
  ssd -S -x $DAEMON -n $NAME -- $OPTIONS
  ret=$?

  echo  "."
  touch $SVIlock
  ;;

 stop)
  [ -e $SVIlock ] || exit 0

  echo -n "Stopping $SVIsubsys services: "
  ssd -K -p $PIDF -n $NAME
  ret=$?

  echo "."
  rm -f $SVIlock
  ;;

 force-reload|reload)
  [ -e $SVIlock ] || exit 0

  echo "Reloading $SVIsubsys configuration files: "
  ssd -K --signal 1 -q -p $PIDF -n $NAME
  ret=$?
  echo "done."
  ;;

 restart)
  $0 stop
  $0 start
  ret=$?
  ;;

 status)
  _status $PIDF
  ret=$?
  ;;

 *)
  echo "Usage: $SVIscript {[re]start|stop|[force-]reload|status}"
  ret=2
  ;;

esac

exit $ret

