#!/bin/sh
#
# $FreeBSD: ports/www/apache13-modssl/files/apache.in,v 1.5 2011/05/15 02:49:15 dougb Exp $
#

# PROVIDE: apache
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable apache:
# apache_enable (bool):      Set to "NO" by default.
#                             Set it to "YES" to enable apache
# apache_profiles (str):     Set to "" by default.
#                              Define your profiles here.
# apachelimits_enable (bool):Set to "NO" by default.
#                             Set it to yes to run `limits $limits_args`
#                             just before apache starts.
# apache_flags (str):        Set to "-DSSL" by default.
#                             Extra flags passed to start command.
# apachelimits_args (str):   Default to "-e -C daemon"
#                             Arguments of pre-start limits run.
# apache_http_accept_enable (bool): Set to "NO" by default.
#                             Set to yes to check for accf_http kernel
#                             module on start up and load if not loaded.
# apache_fib (str):	      Set an altered default network view for apache

. /etc/rc.subr

name="apache"
rcvar=`set_rcvar`

start_precmd="apache_prestart"
restart_precmd="apache_checkconfig"
reload_precmd="apache_checkconfig"
reload_cmd="apache_graceful"
graceful_cmd="apache_graceful"
configtest_cmd="apache_checkconfig"
command="/usr/local/sbin/httpd"
_pidprefix="/var/run/httpd"
pidfile="${_pidprefix}.pid"
required_files=/usr/local/etc/apache/httpd.conf

[ -z "$apache_enable" ]       && apache_enable="NO"
[ -z "$apache_flags" ]        && apache_flags="-DSSL"
[ -z "$apachelimits_enable" ] && apachelimits_enable="NO"
[ -z "$apachelimits_args" ]   && apachelimits_args="-e -C daemon"
[ -z "$apache_http_accept_enable" ] && apache_http_accept_enable="NO"
[ -z "$apache_fib" ] && apache_fib="NO"

apache_accf() {
	retcode=0
	if checkyesno apache_http_accept_enable
	then
		/sbin/kldstat -v | grep accf_http >/dev/null 2>&1
		retcode=${?}
		if [ ${retcode} -ne 0 ]
		then
			/sbin/kldload accf_http 2> /dev/null
			retcode=${?}
		fi
	else
		apache_flags="${apache_flags} -DNOHTTPACCEPT"
	fi
	[ ${retcode} -ne 0 ] && echo "Unable to load accf_http module"
	return ${retcode}
}

load_rc_config $name

if [ -n "$2" ]; then
	profile="$2"
	if [ "x${apache_profiles}" != "x" ]; then
		pidfile="${_pidprefix}.${profile}.pid"
		eval apache_configfile="\${apache_${profile}_configfile:-}"
		if [ "x${apache_configfile}" = "x" ]; then
			echo "You must define a configuration file (apache_${profile}_configfile)"
			exit 1
		fi
		required_files="${apache_configfile}"
		eval apache_enable="\${apache_${profile}_enable:-${apache_enable}}"
		eval apache_flags="\${apache_${profile}_flags:-${apache_flags}}"
		eval apache_http_accept_enable="\${apache_${profile}_http_accept_enable:-${apache_http_accept_enable}}"
		eval apachelimits_enable="\${apachelimits_${profile}_enable:-${apachelimits_enable}}"
		eval apachelimits_args="\${apachelimits_${profile}_args:-${apachelimits_args}}"
		eval apache_fib="\${apache_${profile}_fib:-${apache_fib}}"
		apache_flags="-f ${apache_configfile} -c \"PidFile ${pidfile}\" ${apache_flags}"
	else
		echo "$0: extra argument ignored"
	fi
else
	if [ "x${apache_profiles}" != "x" -a "x$1" != "x" ]; then
		for profile in ${apache_profiles}; do
			eval _enable="\${apache_${profile}_enable}"
			case "x${_enable:-${apache_enable}}" in
			x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
				continue
				;;
			x[Yy][Ee][Ss])
				;;
			*)
				if test -z "$_enable"; then
					_var=apache_enable
				else
					_var=apache_"${profile}"_enable
				fi
				echo "Bad value" \
				    "'${_enable:-${apache_enable}}'" \
				    "for ${_var}. " \
				    "Profile ${profile} skipped."
				continue
				;;
			esac
			echo "===> apache profile: ${profile}"
			/usr/local/etc/rc.d/apache $1 ${profile}
			retcode="$?"
			if [ "0${retcode}" -ne 0 ]; then
				failed="${profile} (${retcode}) ${failed:-}"
			else
				success="${profile} ${success:-}"
			fi
		done
		exit 0
	fi
fi

if [ "${1}" != "stop" ] ; then \
	apache_accf || apache_flags="${apache_flags} -DNOHTTPACCEPT"
fi

apache_requirepidfile()
{
	if [ ! "0`check_pidfile ${pidfile} ${command}`" -gt 1 ]; then
		echo "${name} not running? (check $pidfile)."
		exit 1
	fi
}

apache_checkconfig()
{
	if test -f /usr/local/sbin/envvars
	then
		. /usr/local/sbin/envvars
	fi

	echo "Performing sanity check on apache configuration:"
	eval ${command} ${apache_flags} -t
}

apache_graceful() {
	apache_requirepidfile

	echo "Performing a graceful restart"
	kill -USR1 "`check_pidfile ${pidfile} ${command}`"
}

apache_precmd() 
{
	apache_checkconfig

	if checkyesno apachelimits_enable
	then
		eval `/usr/bin/limits ${apachelimits_args}` 2>/dev/null
	else
		return 0
        fi

}

apache_checkfib () {
	sysctl net.fibs >/dev/null 2>&1
	ret=$? 
 	[ $ret -gt 0 ] && return 0 
	if [ "x$apache_fib" != "xNO" ]
	then 
		command="setfib -F ${apache_fib} ${command}"
	else
		return	0
	fi
}

apache_prestart() {
	apache_checkfib
	apache_precmd
}

extra_commands="reload graceful configtest"
run_rc_command "$1"
# eof
