#!/bin/sh
#
# $FreeBSD: www/squid32/files/squid.in 317041 2013-05-01 18:33:28Z tmseck $
#
# PROVIDE: squid
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Note:
# Set "squid_enable=yes" in either /etc/rc.conf, /etc/rc.conf.local or
# /etc/rc.conf.d/squid to activate Squid.
#
# Additional variables you can define in one of these files:
#
# squid_chdir:	the directory into which the rc system moves into before
# 		starting Squid. Default: /var/squid
#
# squid_conf:	The configuration file that Squid should use.
#		Default: /usr/local/etc/squid/squid.conf
#
# squid_fib:	The alternative routing table id that Squid should use.
#		Default: none
#		See setfib(1) for further details. Note that the setfib(2)
#		system call is not available in FreeBSD versions prior to 7.1.
#
# squid_user:	The user id that should be used to run the Squid master
#		process. Default: squid.
#		Note that you probably need to define "squid_user=root" if
#		you want to run Squid in reverse proxy setups or if you want
#		Squid to listen on a "privileged" port < 1024.
#
# squid_pidfile:
#		The name (including the full path) of the Squid
#		master process' PID file.
#		Default: /var/run/squid/squid.pid.
#		You only need to change this if you changed the
#		corresponding entry in your Squid configuration.
#
# squid_flags:	Additional commandline arguments for Squid you might want to
#		use. See squid(8) for further details.
#

. /etc/rc.subr

name=squid
rcvar=squid_enable

load_rc_config ${name}

: ${squid_chdir:=/var/squid}
: ${squid_conf:=/usr/local/etc/squid/squid.conf}
: ${squid_enable:=NO}
: ${squid_pidfile:=/var/run/squid/squid.pid}
: ${squid_user:=squid}

command=/usr/local/sbin/squid

# Make sure that we invoke squid with "-f ${squid_conf}"; define this
# variable early so reload_cmd and stop_precmd pick it up:

command_args="-f ${squid_conf}"
extra_commands=reload
reload_cmd="${command} ${command_args} ${squid_flags} -k reconfigure"
start_precmd=squid_setfib
stop_precmd="${command} ${command_args} ${squid_flags} -k check 2>/dev/null"
stop_cmd=squid_stop

pidfile=${squid_pidfile}
procname=squid-1
required_dirs=${squid_chdir}

# squid(8) will not start if ${squid_conf} is not present so try
# to catch that beforehand via ${required_files} rather than make
# squid(8) crash.

required_files=${squid_conf}

squid_setfib()
{
	if command -v check_namevarlist > /dev/null 2>&1; then
		check_namevarlist fib && return 0
	fi

	${SYSCTL} net.fibs >/dev/null 2>&1 || return 0

	squid_fib=${squid_fib:-"NONE"}
	if [ "x${squid_fib}" != "xNONE" ]; then
		command="setfib -F ${squid_fib} ${command}"
	else
		return 0
	fi
}

squid_stop()
{
	echo "Stopping ${name}."
	${command} ${command_args} ${squid_flags} -k shutdown
	run_rc_command poll
}

run_rc_command $1
