#!/bin/sh

. /etc/sysconfig/rc.conf
. /etc/image_features

NET_F_USE_SLEEP=false

[ ! -z ${BASH_VERSINFO} ] && [ ${BASH_VERSINFO} -ge 5 ] &&  NET_F_USE_SLEEP=true

SSHD=$(command -v sshd)
LOGGER="/bin/logger -t init.d"
SETSID=/usr/bin/setsid
PIDFILE=/var/run/sshd_rsync.pid
SERVICE=sshdrsync
COMMAND_OPTIONS=-'f /etc/ssh/config_sshd_rsync'

ServiceIsRunning () {
	local PID;

	if [ -r "$PIDFILE" ] ; then
		PID=$(/bin/cat $PIDFILE)

		# Check if running
		/bin/kill -0 $PID > /dev/null 2>&1
		if [ $? = 0 ] ; then
			$LOGGER $SERVICE: already running
			echo "$0 is already running."
			return 1
		fi

		$LOGGER : $SERVICE: state undefined
		return 0
	fi

	return 0
}

ServiceIsRunning2 () {
	local PID;
	local i;

	for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
		if [ -r "$PIDFILE" ] ; then
			PID=$(/bin/cat $PIDFILE)

			# Check if running
			/bin/kill -0 $PID > /dev/null 2>&1
			if [ $? = 0 ] ; then
				$LOGGER $SERVICE: started
				return 0
			fi

			$LOGGER $SERVICE: start failed
			echo "$0 start failed"
			return 1
		fi
		#0.05 sec
		if [ "$NET_F_USE_SLEEP" == "true" ]; then /bin/sleep 0.05 ; else /bin/usleep 50000 ; fi
	done

	$LOGGER $SERVICE: start failed
	echo "$0 start failed"

	return 1
}

ServiceCheckStatus () {
	local PID;

	if [ -r "$PIDFILE" ] ; then
		PID=$(/bin/cat $PIDFILE)

		# Check if still running
		/bin/kill -0 $PID > /dev/null 2>&1
		if [ $? != 0 ] ; then
			$LOGGER : $SERVICE: undefined state
			return 1
		fi

		echo "$0 is up and running"
	else
		echo "$0 is not running (no PID file)"
		return 1
	fi

	return 0
}

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

	if [ $? -ne 0 ]; then
	    echo "sshd not installed."
	    exit 1
	fi
	echo -n "  sshdrsync: "

	mkdir -p /var/empty/sshd
	$SETSID $SSHD $COMMAND_OPTIONS > /dev/null 2>&1
	processID=$(ps -ef | grep "$SSHD $COMMAND_OPTIONS" | grep -v 'grep' | awk '{ printf $2 }')
	echo $processID > $PIDFILE
	
	ServiceIsRunning2
	return $?
}

do_stop ()
{
	PID=$(ps -ef | grep "$SSHD $COMMAND_OPTIONS" | grep -v grep | awk '{print $2}') && echo $PID | xargs kill
        PIDS=$(ps -ef | grep '[s]shd: root@' | awk '{print $2}') && echo $PIDS | xargs kill
	rm -f $PIDFILE
	return $?
}

do_status ()
{
	ServiceCheckStatus
	return $?
}

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

exit $?
