#!/bin/bash
# Copyright 2002 Compaq Information Technologies Group, L.P.

PKGBIN=/opt/compaq/storage/bin
LOGFILE=/var/spool/compaq/cma.log
IM_CFGFILE_PATH="/opt/compaq/storage/etc"
export IM_CFGFILE_PATH
LD_LIBRARY_PATH="/opt/compaq/storage/bin"
export LD_LIBRARY_PATH

cmaecho () {
  echo "  " $*
  echo "  " $* >>$LOGFILE 2>&1
}

cmaechon () {
  echo -n "  " $*
  echo -n "  " $* >>$LOGFILE 2>&1
}

vendorversion() {
	# $1 contains the ENV for Vendor
	# $2 contains the ENV for Version
	# Return 0 when succeed
	if [ ! -f /etc/redhat-release -a \
		! -f /etc/UnitedLinux-release -a \
		! -f /etc/issue ]; then
		echo "Release file does not exist!" 1>&2
		return 1
	fi
	#echo "ARG1=$1"
	#echo "ARG2=$2"
	if [ -z "$1" -o -z "$2" ]; then
		return 2
	fi
	egrep "Red *Hat " /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
	else
		egrep "UnitedLinux " /etc/UnitedLinux-release >/dev/null 2>&1
		if [ "$?" = 0 ]; then
			eval $1="UnitedLinux"
		else
			egrep "SuSE " /etc/issue >/dev/null 2>&1
			if [ "$?" = 0 ]; then
				eval $1="SuSE"
			fi
		fi
	fi
	egrep "Red *Hat .*Advanced Server.* 2\.1AS" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
	eval $1="RedHat"
	eval $2="AS2.1"
	return 0
	fi
	egrep "Red *Hat .*Enterprise Linux.* 2\.1" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
	eval $1="RedHat"
	eval $2="EL2.1"
	return 0
	fi
	egrep "Red *Hat .*Enterprise Linux.* 3" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="EL3"
		return 0
	fi
	egrep "Red *Hat .* 9\.0 |Red *Hat .* 8\.0\.[0-9]" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="9.0"
		return 0
	fi
	egrep "Red *Hat .* 8\.0 |Red *Hat .* 7\.3\.[0-9]" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="8.0"
		return 0
	fi
	egrep "Red *Hat .* 7\.3 |Red *Hat .* 7\.2\.[0-9]" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="7.3"
		return 0
	fi
	egrep "Red *Hat .* 7\.2 |Red *Hat .* 7\.1\.[0-9]" /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="7.2"
		return 0
	fi
	grep "Red *Hat .* 7\.1 " /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="7.1"
		return 0
	fi
	grep "Red *Hat .* 6\.2 " /etc/redhat-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="RedHat"
		eval $2="6.2"
		return 0
	fi
	grep "SLES-7 " /etc/issue >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="SuSE"
		eval $2="SLES-7"
		return 0
	fi
	grep "SLES.8 " /etc/issue >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="SuSE"
		eval $2="SLES-8"
		return 0
	fi
	grep "SuSE .* 7\.2 " /etc/issue >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="SuSE"
		eval $2="7.2"
		return 0
	fi
	grep "SuSE .* 7\.0 " /etc/issue >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="SuSE"
		eval $2="7.0"
		return 0
	fi
	grep "UnitedLinux.* 1\.0" /etc/UnitedLinux-release >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="UnitedLinux"
		eval $2="1.0"
		return 0
	fi
	grep "VMware" /etc/issue >/dev/null 2>&1
	if [ "$?" = 0 ]; then
		eval $1="VMware"
		eval $2="2.0"
		return 0
	fi
	return 9
}

set_vendor_version()
{
	# Identify OS Vendor
	VENDOR="Unknown"
	vendorversion "VENDOR" "VERSION"
	if [ "$VENDOR" != "RedHat" -a \
		"$VENDOR" != "SuSE" -a \
		"$VENDOR" != "UnitedLinux" -a \
		"$VENDOR" != "VMware" ] 
	then
		echo "ERROR: the Linux OS running on your system is not supported!"
		exit 1
	fi
}

startup()
{
	local NAME="$1"
	local PNAME="$2"
	local PFLAGS="$3"
	cmaechon "Starting $NAME ($PNAME): "
	pidlist=`pidof -o $$ $PNAME`
	if [ -z "$pidlist" ]; then
	  $PNAME $PFLAGS >> $LOGFILE 2>&1 &
	  RETVAL=$?
	else
	  RETVAL=1
	fi
	cmaecho
	return $RETVAL
}

stopit()
{
	local NAME="$1"
	local PNAME="$2"
	local VENDOR="$3"
	local DIR="$4"
	cmaechon "Shutting down $NAME ($PNAME): "
	case "$VENDOR" in
	RedHat) killproc "$PNAME" 2>/dev/null ; RETVAL=$? ;;
	VMware) killproc "$PNAME" 2>/dev/null ; RETVAL=$? ;;
	SuSE|UnitedLinux) killproc "$DIR"/"$PNAME" 2>/dev/null ; RETVAL=$? ;;
	esac
	cmaecho
	return $RETVAL
}

do_restart()
{
	local NAME="$1"
	local PNAME="$2"
	local PFLAGS="$3"

	stopit "$NAME" "$PNAME" "$VENDOR"
	startup "$NAME" "$PNAME" "$PFLAGS"
	return $?
}

do_status()
{
	local VENDOR="$1"
	local PNAME="$2"

	case "$VENDOR" in
	RedHat) status $PNAME ; RETVAL=$? ;;
	VMware) status $PNAME ; RETVAL=$? ;;
	SuSE|UnitedLinux) 
		echo -n "Checking for $PNAME: "
		/sbin/checkproc $PKGBIN/$PNAME && echo OK || echo No process
		RETVAL=$?
		;;
	*)
		RETVAL=1
		;;
	esac
	return $RETVAL
}

agent_script_main()
{
	local VENDOR="$1"
	local VERSION="$2"
	local cmd="$3"
	local NAME="$4"
	local PNAME="$5"
	local PFLAGS="$6"

	case "$VENDOR" in
	RedHat|VMware|SuSE|UnitedLinux)
		RETVAL=0
		case "$cmd" in
		start)	startup "$NAME" "$PNAME" "$PFLAGS" ; RETVAL=$?  ;;
		stop)	stopit "$NAME" "$PNAME" "$VENDOR" "$PKGBIN" ; RETVAL=$? ;;
		restart) do_restart "$NAME" "$PNAME" "$PFLAGS" ; RETVAL=$?  ;;
		status) do_status "$VENDOR" "$PNAME" ; RETVAL=$? ;;
		*) cmaecho "Usage: $PNAME {start|stop|restart|status}" ; exit 1 ;;
		esac
		exit $RETVAL
		;;
	*)
		cmaecho "ERROR: Can't identify Linux OS Vendor $VENDOR"
		exit 1
	esac
}

set_vendor_version

# source function library
case "$VENDOR" in
  RedHat|VMware) . /etc/rc.d/init.d/functions ;;
  SuSE|UnitedLinux) [ -f /etc/rc.config ] && . /etc/rc.config ;;
     *) cmaecho "ERROR: Can't identify Linux OS Vendor $VENDOR"
        exit 1
esac

PATH=$PKGBIN:$PATH
