#! /bin/sh
#
# innd		InterNet News System
#
# chkconfig:	345 95 05
# description:	inn is the most popular server for Usenet news. It allows \
#		you to setup local news servers. It can be difficult to \
#		set up properly though, so be sure to read /usr/doc/inn* \
#		before trying.

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

# Source networking configuration.
. /etc/sysconfig/network

# Daemon specific
. /usr/share/news/innshellvars

# Check that networking is up.
if is_yes "${NETWORKING}"; then
	if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
		msg_network_down "INN"
		exit 1
	fi
else
	exit 0
fi

start() {
	if [ ! -f /var/lock/subsys/inn ]; then
		grep -v "#" /etc/news/inn.conf | grep ovmethod | grep ovdb 2>&1 >/dev/null
		RETVAL=$?
		if [ $RETVAL -eq 0 ]; then
			msg_starting "INN ovdb_monitor"
			daemon --pidfile /var/run/news/ovdb_monitor.pid --user news ovdb_init
		fi

		msg_starting "INN"
		daemon --pidfile /var/run/news/innd.pid --user news innd
		RETVAL=$?
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/inn
		if is_yes "$DOINNWATCH" ; then
			msg_starting "INN Watch"
			busy
			daemon --fork --pidfile /var/run/news/innwatch.pid --user news /usr/bin/innwatch
			RETVAL=$?
			[ $RETVAL -eq 0 ] && touch /var/lock/subsys/innwatch
		fi
	else
		msg_already_running "INN"
	fi
}

stop() {
	if [ -f /var/lock/subsys/inn ]; then
		msg_stopping "INN"
		busy
		if ctlinnd shutdown "Stopping INN service"; then
			ok
		else
			fail
		fi

		if [ -f /var/run/news/innwatch.pid ]; then
			msg_stopping "INN Watch"
			killproc --pidfile /var/run/news/innwatch.pid innwatch -9
			rm -f /var/run/news/innwatch.pid \
			/var/run/news/LOCK.innwatch >/dev/null 2>&1
		fi

		if [ -f /var/run/news/infeed.pid ]; then
			msg_stopping "INN Feed"
			killproc --pidfile /var/run/news/infeed.pid innfeed -9
			rm -f /var/run/news/innfeed.pid >/dev/null 2>&1
		fi

		if [ -f /var/run/news/actived.pid ]; then
			msg_stopping "INN Actived"
			killproc --pidfile /var/run/news/actived.pid actived -9
			rm -f /var/run/news/actived.pid >/dev/null 2>&1
		fi

		if [ -f /var/run/news/ovdb_monitor.pid ]; then
			msg_stopping "INN ovdb_monitor"
			killproc --pidfile /var/run/news/ovdb_monitor.pid ovdb_monitor -15
			rm -f /var/run/news/ovdb_monitor.pid >/dev/null 2>&1
		fi

		rm -f /var/lock/subsys/inn >/dev/null 2>&1

	else
		msg_not_running INN
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
	status innwatch
	status innd
	if [ $? -eq 0 ]; then
		innstat
	fi
	;;
  reload|force-reload)
	if [ -f /var/lock/subsys/inn ]; then
		msg_reloading "INN"
		busy
		ctlinnd reload all "Reloading" >/dev/null 2>&1;
		[ $? -ne 0 ] && RETVAL=7
		[ $RETVAL -eq 0 ] && ok || died
	else
		msg_not_running INN >&2
		exit 7
	fi
	;;
  restart)
	stop
	sleep 2
	start
	;;
  *)
	msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
	exit 3
esac

exit $RETVAL
