#!/bin/sh

# PROVIDE: snort
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown

# Add the following lines to /etc/rc.conf to enable snort:
# snort_enable (bool):		Set to YES to enable snort
# 				Default: NO
# snort_flags (str):		Extra flags passed to snort
#				Default: -D -q
# snort_interface (str):	Network interface to sniff
#				Default: ""
# snort_conf (str):		Snort configuration file
#				Default: ${PREFIX}/etc/snort/snort.conf
# snort_expression (str):	filter expression
#				If your expression is very long, set
#				kern.ps_arg_cache_limit sysctl variable
#				to large value. Otherwise, snort won't
#				restart!
#				Default: ""
#
# To enable multi interface, use:
# snort_rules="eth0 eth1"
# defaults will follow, snort.conf becomes 'snort_eth0.conf', etc.

. /etc/rc.subr

name="snort"
rcvar=snort_enable
extra_commands=reload

command="%%PREFIX%%/bin/snort"

load_rc_config $name

[ -z "$snort_enable" ]    && snort_enable="NO"
[ -z "$snort_conf" ]      && snort_conf="%%PREFIX%%/etc/snort/snort.conf"
[ -z "$snort_flags" ]     && snort_flags="-D -q"

[ -n "$snort_interface" ] && snort_flags="$snort_flags -i $snort_interface" \
                          && pidfile="/var/run/snort_${snort_interface}.pid"
[ -n "$snort_conf" ]      && snort_flags="$snort_flags -c $snort_conf"
[ -n "$snort_expression" ] && snort_flags="$snort_flags $snort_expression"

if [ -n "$snort_rules" ]; then
  _1=$1
  if [ $# -gt 1 ]; then shift; snort_rules=$*; fi
  snort_conf=""
  snort_flags=""
  rc=0
  for i in ${snort_rules}; do
	eval _conf=\$snort_${i}_conf
	eval _flags=\$snort_${i}_flags
	[ -z "$_flags" ] && _flags="-D -q"
	eval _intf=\$snort_${i}_interface
	eval _expr=\$snort_${i}_expression
        if [ -n "$_intf" ] ;then
            _conf="$_conf -i $_intf"
	   eval pidfile="/var/run/snort_$_intf.pid"
        fi
	command_args="$_flags -c $_conf $_expr"
        run_rc_command "$_1"
        if [ $? -ne 0 ]; then rc=1; fi
	unset _pidcmd _rc_restart_done
   done
   exit $rc
else
   run_rc_command "$1"
fi
