#!/bin/sh
# $Id: sesam2000_rc,v 1.10 2006/02/15 11:28:51 sesam Exp $
# Copyright SEP AG (c) 2005 
#
# Authors: Rainer Seyerlein <rs@sep.de>, 2005
#          
# Generic Start/Stop script for UNIX
#
# /etc/init.d/sesam
#

#
# load sesam configuration
#
read_ini()
{
   SM_INI=`grep -i '^sm_ini=' /etc/sesam2000.ini|cut -d"=" -f2`
   echo `grep -i "$1=" "$SM_INI"|cut -d"=" -f2`
}

status()
{
    status=$?
    test $status -eq 0 && return 0
    test $status -eq 4 && return 1
}

update_client_version()
{
  newversion=`grep "^version=" ${GV_RO}/skel/*_???.?.?|cut -d "=" -f 2`
  oldversion=`grep "^version=" ${GV_RW_INI}/sm.ini|cut -d "," -f 2`
  echo "current version (sm.ini): $oldversion "
  echo "new version (skel)      : $newversion"

  if [ "$oldversion" != "$newversion" ]
    then
      awk -F "," '/^version=/ { print $1","newversion"," $3 $4
             next }
             /^gv_version=/ { next }
             /^pre=/ { print "pre=" oldversion
             next }
             /^now=/ { print "now=" newversion
             next }
            { print }' oldversion=$oldversion newversion=$newversion ${GV_RW_INI}/sm.ini > ${GV_RW_INI}/sm.ini.new
    mv ${GV_RW_INI}/sm.ini ${GV_RW_INI}/sm.ini.${oldversion}
    mv ${GV_RW_INI}/sm.ini.new ${GV_RW_INI}/sm.ini
  fi
}

check_version()
{
  test -r /etc/sesam2000.ini || return 2
  newversion=`grep "^version=" \`ls ${GV_RO}/skel/*_???.?.?|tail -1 \`|cut -d "=" -f 2`
  oldversion=`grep "^version=" ${GV_RW_INI}/sm.ini|cut -d "," -f 2`
  [ "$oldversion" != "$newversion" ] && return 1
  return 0
}

PATH=$PATH:/sbin:/bin:/usr/bin
export PATH

rc_failed=1
insttype=client
sm_start=sm_ctrld.sh

if test -r /etc/sesam2000.ini 
then
  GV_RO=`read_ini gv_ro`
  GV_RO_BIN=`read_ini gv_ro_bin`
  GV_RW_INI=`read_ini gv_rw_ini`
fi

test -s $GV_RW_INI/sesam2000.profile && . $GV_RW_INI/sesam2000.profile 

platform=`uname`
if [ "$platform" = "Linux" ]
then
  FASTSTART=startproc
fi  
if [ "$platform" = "SunOS" ]
then
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/pgsql/lib 
  PATH=/usr/xpg4/bin:$PATH
  export LD_LIBRARY_PATH PATH
fi  


insttype=`grep "^version=" ${GV_RW_INI}/sm.ini|cut -d "=" -f 2|cut -d ',' -f 1`
[ "$insttype" = "server" ] && sm_start=sm_main
[ "$insttype" = "tapeserver" ] && sm_start=sm_main


case "$1" in
    start)
           echo "Starting sesam:"
           check_version
           ret=$?
           case $ret in
               0)
                  ${GV_RO_BIN}/${sm_start} start >/dev/null 2>&1 || exit $rc_failed 
                  ;;
               1)
                  #echo ""
                  echo "Found new sesam version. Starting update ... "
                  if [ "$insttype" = "server" ];then
                     ${GV_RO_BIN}/sm_startup >/dev/null 2>&1 || exit $rc_failed 
                  else
                     update_client_version  >/dev/null 2>&1  
                     ${GV_RO_BIN}/${sm_start} start >/dev/null 2>&1 || exit $rc_failed  
                  fi
                  ;;
               2)
                  #echo ""
                  echo "Sesam not configured yet. Starting setup ... "
                  setup
                  ;;
           esac
           echo "sesam started"
	   exit 0
	   ;;
    stop)
            echo "Shutting down sesam:"
            if [ "$insttype" = "server" ]
               then
                 ${GV_RO_BIN}/sm_shutdown >/dev/null 2>&1 || exit $rc_failed 
               else
                 ${GV_RO_BIN}/${sm_start} stop >/dev/null 2>&1 || exit $rc_failed 
               fi
            echo "sesam stopped"
	    exit 0
	    ;;
    status)
       echo "Checking for sesam: "
       ${GV_RO_BIN}/${sm_start} status >/dev/null 2>&1 
       exit $?
        ;;
    start_msg)
       echo "Start sesam daemon" 
       ;;
    stop_msg)
       echo "Stop sesam daemon" 
       ;;
    reload)
       $0 stop  &&  $0 start  ||  return=$rc_failed
       ;;
    restart)
       $0 stop  &&  $0 start  ||  return=$rc_failed
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart|reload}"
       exit 1
       ;;
esac

# Inform the caller not only verbosely and set an exit status.
