#!/bin/sh

# Bring up/down ntpd

. /etc/sysconfig/rc.conf
. /bin/network-functions

SETSID=/usr/bin/setsid
PIDFILE=/var/run/rollback.pid
SERVICE=rollback
PROCESS_NAME=rollback

do_prepare ()
{
	if [ -f /mnt/flashfs/configs/rollback.tar.gz ] ; then
		echo "$0 already prepared"
		exit 1;
	fi

	/bin/tar -c -C /mnt/flashfs/configs current | /bin/gzip - > /tmp/rollback.tar.gz
	mv -f /tmp/rollback.tar.gz /mnt/flashfs/configs/rollback.tar.gz

	return
}

do_clean ()
{
	if [ ! -f /mnt/flashfs/configs/rollback.tar.gz ] ; then
		echo "$0 already cleaned"
		exit 1;
	fi

	/bin/rm -rf /mnt/flashfs/configs/rollback.tar.gz
	/bin/rm -rf /tmp/rollback-active

	return
}

do_start ()
{
	if ! ServiceCheckRunning1 ; then
		return $?
	fi

	/etc/init.d/softdogd wait
	$SETSID /bin/$PROCESS_NAME -t $ROLLBACK_TIME
	/bin/touch /tmp/rollback-active
	ServiceCheckRunning2

	return $?
}

do_stop ()
{
	/etc/init.d/softdogd wait
	/bin/rm -rf /mnt/flashfs/configs/rollback.tar.gz
	/bin/rm -rf /tmp/rollback-active
	ServiceStop

	return $?
}

do_status ()
{
	ServiceStatus

	return $?
}

do_rollback ()
{
	if [ -f /mnt/flashfs/configs/rollback.tar.gz ] ; then
		/bin/raise_event -a system -n rollback > /dev/null 2>&1
		/bin/rm -rf /mnt/flashfs/configs/current
		/bin/gunzip -c /mnt/flashfs/configs/rollback.tar.gz | /bin/tar -x -f - -C /mnt/flashfs/configs
		/bin/rm -rf /mnt/flashfs/configs/rollback.tar.gz
		/sbin/reboot
	else
		echo "$0 is not running (no rollback configuration)"
	fi

	return
}

case "$1" in
	prepare)
		do_prepare
		;;
	clean)
		do_clean
		;;
	start)
		do_start
		;;
	stop)
		do_stop
		;;
	status)
		do_status
		;;
	rollback)
		do_rollback
		;;
	restart)
		do_stop
		do_prepare
		do_start
		;;
	*)
		echo "Usage: $0 {start|stop|restart|rollback|status}"
		exit 1
esac

exit $?
