#!/sbin/runscript
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-analyzer/snort/files/snort.rc12,v 1.1 2013/04/10 18:33:19 chainsaw Exp $

extra_commands="checkconfig"
extra_started_commands="reload"

depend() {
	need net
	after mysql
	after postgresql
}

checkconfig() {
	if [ ! -e ${SNORT_CONF} ] ; then
		eerror "You need a configuration file to run snort"
		eerror "There is an example config in /etc/snort/snort.conf.distrib"
		return 1
	fi
	if [ ! -d "/var/run/snort" ] ; then
		checkpath -d /var/run/snort
	fi
}

start() {
	checkconfig || return 1
	ebegin "Starting snort"
	start-stop-daemon --start --quiet --exec /usr/bin/snort \
		-- --nolock-pidfile --pid-path /var/run/snort -D -i ${SNORT_IFACE} \
		 -c ${SNORT_CONF} >/dev/null 2>&1
	eend $?
}

stop() {
	ebegin "Stopping snort"
	start-stop-daemon --stop --quiet --pidfile /var/run/snort/snort_${SNORT_IFACE}.pid
	# Snort needs a few seconds to fully shutdown
	sleep 15
	eend $?
}

reload() {

	local SNORT_PID="`cat /var/run/snort/snort_${SNORT_IFACE}.pid`"
	local SNORT_USER="`ps -p ${SNORT_PID} --no-headers -o user`"

        if [ ! -f /var/run/snort/snort_${SNORT_IFACE}.pid ]; then
        	eerror "Snort isn't running"
                return 1
	elif [ ${SNORT_USER} != root ]; then
		eerror "Snort must be running as root for reload to work!"
		return 1
	else
		checkconfig || return 1
		ebegin "Reloading Snort"
		start-stop-daemon --signal HUP --pidfile /var/run/snort/snort_${SNORT_IFACE}.pid
        fi
}


