#!/bin/sh
# $Id: sm_startstop.suse,v 1.14 2005/07/25 06:48:38 sesam Exp $
# Copyright (c) 2002 
#
# Authors: Rainer Seyerlein <rs@sep.de>, 2002
#          
#
#
# /etc/init.d/sesam
#
### BEGIN INIT INFO
# Provides:			sesam
# Required-Start:		$local_fs $remote_fs $network 
# X-UnitedLinux-Should-Start:	$named $time postgresql ypclient dhcp radiusd
# Required-Stop:		$local_fs $remote_fs $network
# X-UnitedLinux-Should-Stop:	
# Default-Start:		3 5
# Default-Stop:			0 1 2 6
# Short-Description:		SEPsesam 	
# Description:			Start SEPsesam backup client
### END INIT INFO

#
# load the 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 3
}

update_client_version()
{
  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`
  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=" ${GV_RO}/skel/*_???.?.*|cut -d "=" -f 2`
  oldversion=`grep "^version=" ${GV_RW_INI}/sm.ini|cut -d "," -f 2`
  [ "$oldversion" != "$newversion" ] && return 1
  return 0
}

setup()
{
  RPM_INSTALL_PREFIX=/opt
  SESAM_VAR=/var/opt/sesam
  L=`grep ^RC_LANG= /etc/sysconfig/language|cut -d = -f 2`
  if echo $L|grep -i de >/dev/null
  then
    SM_LANG=de
  else
    SM_LANG=en
  fi
  cd $RPM_INSTALL_PREFIX; export PATH=$RPM_INSTALL_PREFIX/sesam/bin/sesam:$PATH:/usr/X11R6/bin:/opt/kde3/bin;$RPM_INSTALL_PREFIX/sesam/bin/sesam/sm_setup make_server -r $SM_LANG -o "bin=/opt/sesam,var=$SESAM_VAR,trace=2,startup=start" >/dev/null 2>&1
  cd $SESAM_VAR/var/ini
  source sesam2000.profile
  sm_db "update defaults set value='/usr/share/doc/packages/sesam/html/um_${SM_LANG}.htm' where key='unix_htmlhelp'" >/dev/null 2>&1
  sm_db "update defaults set value='/usr/share/doc/packages/sesam/um_${SM_LANG}.pdf' where key='unix_pdfhelp'" >/dev/null 2>&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 /etc/rc.status && \
    . /etc/rc.status
test -s $GV_RW_INI/sesam2000.profile && . $GV_RW_INI/sesam2000.profile 

FASTSTART=""
platform=`uname`
if [ "$platform" = "Linux" ]
then
  FASTSTART=startproc
fi  

rc_reset

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

type setJava >/dev/null 2>&1 && source setJava --vendor Sun  --version 1.4 >/dev/null 2>&1
case "$1" in
    start)
           echo -n "Starting sesam:"
           check_version
           ret=$?
           case $ret in
               0)
                  ${GV_RO_BIN}/${sm_start} start  >/dev/null 2>&1  
                  ;;
               1)
                  echo ""
                  echo "Found new sesam version. Starting update ... "
                  if [ "$insttype" = "server" ];then
                     ${GV_RO_BIN}/sm_startup  >/dev/null 2>&1
                  else
                     update_client_version  >/dev/null 2>&1  
                     ${GV_RO_BIN}/${sm_start} start  >/dev/null 2>&1  
                  fi
                  ;;
               2)
                  echo ""
                  echo "Sesam not configured yet. Starting setup ... "
                  setup
                  ;;
           esac
           rc_status -v
	   ;;
    stop)
            echo -n "Shutting down sesam:"
            if [ "$insttype" = "server" ]
               then
                 ${GV_RO_BIN}/sm_shutdown >/dev/null 2>&1 
               else
                 ${GV_RO_BIN}/${sm_start} stop >/dev/null 2>&1
               fi
            rc_status -v
	    ;;
    status)
       echo -n "Checking for sesam: "
       ${GV_RO_BIN}/${sm_start} status >/dev/null 2>&1 
       status
       rc_status -v
        ;;
    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.
rc_exit
