#!/bin/sh
#
# Init file for Barnyard2
#
#
# chkconfig: 2345 89 11
# description:  Barnyard2 is an output processor for snort.
#
# processname: barnyard2
# config: /etc/sysconfig/barnyard2
# config: /etc/barnyard2/barnyard2.conf

. /etc/rc.d/init.d/functions
. /etc/sysconfig/network

### Check that networking is up.
[ "${NETWORKING}" == "no" ] && exit 0

[ -x /usr/sbin/snort ] || exit 1
[ -r /etc/snort/snort.conf ] || exit 1

### Default variables
SYSCONFIG="/etc/sysconfig/barnyard2"

### Read configuration
[ -r "$SYSCONFIG" ] && . "$SYSCONFIG"

RETVAL=0
prog="barnyard2"

COMMON_LOCKFILE="/var/lock/subsys/barnyard2"

print_all_ifaces() {
	find /sys/class/net/ -mindepth 1 -maxdepth 1 -xtype d \! -name lo -printf '%f\n' | sort
}

IFN=`echo $INTERFACES | sed -e 's/, */ /g'`
case "$IFN" in
    "" | any | all | Any | All | ANY | ALL ) IFN=`print_all_ifaces` ;;
esac

foreach_iface() {
	local func="$1"
	shift
	for i in $IFN; do
		PIDFILE="/var/run/barnyard2_$i.pid"
		LOCKFILE="/var/lock/subsys/barnyard2_$i"
		COMMON_OPTIONS="--name barnyard2 --pidfile $PIDFILE --lockfile $LOCKFILE	--displayname barnyard2($i)"
		"$func" "$i" "$@" || return 1
	done
	return $RETVAL
}

start1() {
	ARCHIVEDIR="$SNORTDIR/$1/archive"
	WALDO_FILE="$SNORTDIR/$1/barnyard2.waldo"
	BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR/$1 -w $WALDO_FILE -a $ARCHIVEDIR -f $LOG_FILE -i $1 $EXTRA_ARGS"
	if [ ! -d "$ARCHIVEDIR" ]; then
		mkdir -p "$ARCHIVEDIR"
		chown snort:snort $SNORTDIR/$1/
	fi
	start_daemon $COMMON_OPTIONS -- $prog $BARNYARD_OPTS
	local retval=$?
	[ $RETVAL -eq 0 ] && RETVAL=$retval
	return $retval
}

start() {
	foreach_iface start1
	[ $RETVAL = 0 ] && /bin/touch -f "$COMMON_LOCKFILE"
}

stop1() {
	stop_daemon $COMMON_OPTIONS -- $prog
	local retval=$?
	[ $RETVAL -eq 0 ] && RETVAL=$retval
	return $retval
}

stop() {
	foreach_iface stop1
	[ $RETVAL = 0 ] && /bin/rm -f "$COMMON_LOCKFILE"
}

restart() {
	stop
	start
}

reload() {
	restart
	return
}

status1() {
	status $COMMON_OPTIONS -- $prog
	local retval=$?
	[ $RETVAL -eq 0 ] && RETVAL=$retval
}

checkstatus() {
	foreach_iface status1
}

status0() {
	status $COMMON_OPTIONS -- $prog 2>&1 >/dev/null
	local retval=$?
	[ $retval -eq 0 ] && RETVAL=$retval
	return 0
}

is_loaded() {
	RETVAL=1
	foreach_iface status0
	return $RETVAL
}

case "$1" in
	start)    start        ;;
	stop)     stop         ;;
	status)   checkstatus  ;;
	restart)  restart      ;;
	reload)   reload       ;;
	condstop)    is_loaded && stop    ;;
	condrestart) is_loaded && restart ;;
	condreload)  is_loaded && reload  ;;
	*)
		msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}"
		RETVAL=1
esac

exit $RETVAL
