#!/bin/sh
#
### BEGIN INIT INFO
# Provides: openwsmand
# Required-Start: $remote_fs
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6 
# Short-Description: Openwsman Daemon
# Description: openwsmand
#       Start/Stop the Openwsman Daemon
### END INIT INFO
#
#
# chkconfig: 2345 36 64
# description: Openwsman Daemon
# processname: openwsmand

NAME=openwsmand
DAEMON=/usr/sbin/$NAME
OPTIONS=-S # with SSL
PIDFILE=/var/run/$NAME.pid

lsb=0

if [ $EUID != 0 ]; then
 echo "This script must be run as root."
 exit 1;
fi

if [ "$DESCRIPTIVE" = "" ]; then
 DESCRIPTIVE="Openwsman Daemon"
fi

lockfile=${X1}{SVIlock:-/var/lock/subsys/$NAME}

[ -x $DAEMON ] || exit 0

if [ -f /etc/rc.status ]; then
        # LSB conformant system
	lsb=1
	
	# See how we were called.
	. /etc/rc.status

	# Reset status of this service
	rc_reset

fi

start()
{
    if [ ! -f "@WSMANCONF_DIR@/serverkey.pem" ]; then
      if [ -f "/etc/ssl/servercerts/servercert.pem" \
           -a -f "/etc/ssl/servercerts/serverkey.pem" ]; then
	echo "Using common server certificate /etc/ssl/servercerts/servercert.pem"
	ln -s /etc/ssl/servercerts/server{cert,key}.pem @WSMANCONF_DIR@
      else
	echo "FAILED: Starting openwsman server"
        echo "There is no ssl server key available for openwsman server to use."
	echo -e "Please generate one with the following script and start the openwsman service again:\n"
	echo "##################################"
        echo "/etc/openwsman/owsmangencert.sh"
	echo "================================="

	echo "NOTE: The script uses /dev/random device for generating some random bits while generating the server key."
	echo "      If this takes too long, you can replace the value of \"RANDFILE\" in @SYSCONFDIR@/ssleay.cnf with /dev/urandom. Please understand the implications of replacing the RNADFILE."
		
      fi
    fi

    # Start daemons.
    echo -n "Starting the $DESCRIPTIVE"
    if [ $lsb -ne 0 ]; then
      startproc -p $PIDFILE $DAEMON $OPTIONS> /dev/null 2>&1
      rc_status -v
    else
      $DAEMON -S && echo "               done." || echo "  failed."
    fi
}

stop()
{
	# Stop daemons.
	echo -n "Shutting down $DESCRIPTIVE  "
	if [ $lsb -ne 0 ]; then
          killproc -TERM $DAEMON
          rc_status -v
	else
          kill -9 `pidof openwsmand` > /dev/null 2>&1
	  if [ $? -eq 0 ]; then
	    echo "		done"
	  fi 
	fi
}

case "$1" in
    start)
	start
    	touch $lockfile
    ;;

    stop)
    	stop
	rm -f $lockfile
    ;;

    restart)
    	stop
    	start

    ;;
    force-reload)
    	stop
    	start

    ;;

    reload)
    echo -n "Reload service $DESCRIPTIVE"
    if [ $lsb -ne 0 ]; then
      killproc -HUP $DAEMON
      rc_status -v
    else
      killall -HUP openwsmand && echo "                 done." || echo "  failed."
    fi
    ;;

    status)
    echo -n "Checking for service $DESCRIPTIVE"
    if [ $lsb -ne 0 ]; then
      checkproc $DAEMON
      rc_status -v
    else
      pidof openwsmand > /dev/null 2>&1
      if [ $? -eq 0 ]; then
        echo "             running"
      else
        echo "             stopped"
      fi
    fi
    ;;

   condrestart)
      [ -e $lockfile ] && restart
    ;;

    *)
    echo "Usage: $0 {restart|start|stop|reload|force-reload|status|condrestart}"
esac

if [ $lsb -ne 0 ]; then
	rc_exit
else
	exit 0
fi
