#!/bin/sh
#
# VirtualBox autostart service init script.
#
# chkconfig:	35 35 65
# description: VirtualBox autostart service
# processname:	VBoxAutostart
# config:	/etc/vbox/autostart.cfg
#

# Source function library
. /etc/rc.d/init.d/functions

VBOXAUTOSTART_DB=/etc/vbox/autostart
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
VBOXAUTOSTART=/usr/lib64/VirtualBox/VBoxAutostart

# Get service config - may override defaults
[ -f /etc/sysconfig/virtualbox ] && . /etc/sysconfig/virtualbox

start_daemon() {
	local user="$1"
	shift
	show "VMs for user '%s'" "$user"
	daemon --user $user "$@"
}

start() {
	# Check if the service is already running?
	if [ -f /var/lock/subsys/vboxautostart ]; then
		msg_already_running "VirtualBox Autostart"
		return
	fi

	[ -z "$VBOXAUTOSTART_DB" ] && exit 0
	[ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0

	msg_starting "VirtualBox VMs configured for autostart"; busy; echo

	local file user PARAMS="--background --start --config $VBOXAUTOSTART_CONFIG"

	# prevent inheriting this setting to VBoxSVC
	unset VBOX_RELEASE_LOG_DEST

	for file in $VBOXAUTOSTART_DB/*.start; do
		test -f "$file" || continue
		user=${file##*/}; user=${user%.start}
		start_daemon $user $VBOXAUTOSTART $PARAMS
	done

	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/vboxautostart
}

stop() {
	if [ ! -f /var/lock/subsys/vboxautostart ]; then
		msg_not_running "VirtualBox Autostart"
		return
	fi

	[ -z "$VBOXAUTOSTART_DB" ] && exit 0
	[ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0

	# Stop daemons.
	msg_stopping "VirtualBox Autostart"; busy; echo

	local file user PARAMS="--stop --config $VBOXAUTOSTART_CONFIG"

	# prevent inheriting this setting to VBoxSVC
	unset VBOX_RELEASE_LOG_DEST

	for file in $VBOXAUTOSTART_DB/*.stop; do
		test -f "$file" || continue
		user=${file##*/}; user=${user%.stop}
		start_daemon $user $VBOXAUTOSTART $PARAMS
	done

	rm -f /var/lock/subsys/vboxautostart
}

condrestart() {
	if [ ! -f /var/lock/subsys/vboxautostart ]; then
		msg_not_running "VirtualBox Autostart"
		RETVAL=$1
		return
	fi

	stop
	start
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	stop
	start
	;;
  try-restart)
	condrestart 0
	;;
  force-reload)
	condrestart 7
	;;
  *)
	msg_usage "$0 {start|stop|restart|try-restart|force-reload}"
	exit 3
esac

exit $RETVAL
