#!/bin/sh

# variables users can override in the defaults file
OSVC_ROOT_PATH="/usr/share/opensvc"
OSVC_PYTHON="python"
OSVC_PYTHON_ARGS=""

if [ -r "/etc/defaults/opensvc" ]
then
	# FreeBSD, Darwin
	. "/etc/defaults/opensvc"
elif [ -r "/etc/default/opensvc" ]
then
	# Debian-like, Tru64, SunOS and HP-UX
	. "/etc/default/opensvc"
elif [ -r "/etc/sysconfig/opensvc" ]
then
	# Red Hat-like
	. "/etc/sysconfig/opensvc"
elif [ -r "/etc/conf.d/opensvc" ]
then
	# Alpine, Gentoo
	. "/etc/conf.d/opensvc"
elif [ -r "/etc/rc.config.d/opensvc" ]
then
	# AIX
	. "/etc/rc.config.d/opensvc"
fi

INTER="$OSVC_PYTHON $OSVC_PYTHON_ARGS"
BASENAME=`basename $0`

case $BASENAME in
om)
	;;
opensvc)
	#
	# Use me as the shebang for python modules to be garantied the
	# same python requirements than the agent are met (ie 2.6+).
	#
	# Example: #!/usr/bin/env opensvc
	#
	exec "$OSVC_PYTHON" "$@"
	;;
nodemgr)
	case $1 in
	daemon)
		shift
		KIND=daemon
		;;
	dns)
		KIND=daemon
		;;
	net|network)
		shift
		KIND=network
		;;
	pool)
		shift
		KIND=pool
		;;
	*)
		KIND=node
		;;
	esac
	;;
svcmgr)
	KIND=svc
	;;
volmgr)
	KIND=vol
	;;
usrmgr)
	KIND=usr
	;;
secmgr)
	KIND=sec
	;;
cfgmgr)
	KIND=cfg
	;;
ccfgmgr)
	KIND=ccfg
	;;
nscfgmgr)
	KIND=nscfg
	;;
svcmon)
	KIND=mon
	;;
esac

main() {
	if test -z "$OSVC_CONTEXT"
	then
		case "`id`" in
		uid=0\(*)
			;;
		*)
			SUDO=`which sudo 2>/dev/null`
			;;
		esac
	fi
	if test -x "$SUDO" 
	then
		SUDO="$SUDO OSVC_NAMESPACE=$OSVC_NAMESPACE OSVC_KIND=$OSVC_KIND"
		exec $SUDO $0 "$@"
		exit
	fi

	if [ ! -z "$OSVC_COMMAND_LOG" ]
	then
		log "$@" >/dev/null 2>&1
	fi
	OSVC_CWD=$PWD
	export OSVC_CWD
	cd $OSVC_ROOT_PATH
	if test -n "$KIND"
	then
		PYTHONPATH="$OSVC_ROOT_PATH:$PYTHONPATH" $INTER $OSVC_PYTHON_ARGS -m opensvc $KIND "$@"
		return $?
	fi
	case $1 in
	ns)
		echo "The 'om' alias must be sourced to handle ns actions" >&2
		exit 1
		;;
	*)
		PYTHONPATH="$OSVC_ROOT_PATH:$PYTHONPATH" $INTER $OSVC_PYTHON_ARGS -m opensvc "$@"
		;;
	esac
}

log() {
	OSVC_COMMAND_STRING="$0 $@"
	if [ ! -f "$OSVC_COMMAND_LOG" ]
	then
		touch $OSVC_COMMAND_LOG
	fi
	if test -w $OSVC_COMMAND_LOG
	then
		if [ "`uname`" = "SunOS" ] ; then
			GREP=`which ggrep 2>/dev/null`
		else
			GREP=`which grep 2>/dev/null`
		fi
		if test -x "$GREP"
		then
			echo "$OSVC_COMMAND_STRING" | $GREP -qE 'sec/|secret' && return
			$GREP -qxF "$OSVC_COMMAND_STRING" $OSVC_COMMAND_LOG || echo "$OSVC_COMMAND_STRING" >> $OSVC_COMMAND_LOG
		fi
	fi
}

main "$@"
