mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-16 05:53:00 +02:00
The squid proxy server has been blocked by unresponsive redirectors and it took ages to kill it in the past. To speed up the shutdown process, we will stop all redirector services at the same time. If the squid service is still running we will wait up to 30 seconds before a TERM and finaly a KILL signal will be sent. Fixes #10368.
151 lines
3.4 KiB
Bash
151 lines
3.4 KiB
Bash
#!/bin/sh
|
|
# Begin $rc_base/init.d/squid
|
|
|
|
. /etc/sysconfig/rc
|
|
. $rc_functions
|
|
|
|
chown -R squid:squid /var/log/squid
|
|
chown -R squid:squid /var/log/squidGuard
|
|
|
|
|
|
transparent() {
|
|
DEVICE=$1
|
|
|
|
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
|
|
eval $(/usr/local/bin/readhash /var/ipfire/proxy/settings)
|
|
|
|
# If the proxy port is not set we set the default to 800.
|
|
if [ -z $PROXY_PORT ]; then
|
|
PROXY_PORT=800
|
|
fi
|
|
|
|
LOCALIP=`cat /var/ipfire/red/local-ipaddress | tr -d \n`
|
|
if [ -z $LOCALIP ]; then
|
|
boot_mesg "Couldn't read local-ipaddress" ${FAILURE}
|
|
exit 1
|
|
fi
|
|
|
|
COUNT=1
|
|
FILE=/var/ipfire/vpn/config
|
|
|
|
while read LINE; do
|
|
let COUNT=$COUNT+1
|
|
CONN_TYPE=`echo "$LINE" | awk -F, '{ print $5 }'`
|
|
if [ "$CONN_TYPE" != "net" ]; then
|
|
continue
|
|
fi
|
|
iptables -t nat -A SQUID -i $1 -p tcp -d `echo "$LINE" | awk -F, '{ print $13 }'` --dport 80 -j RETURN
|
|
done < $FILE
|
|
|
|
if [ "$RED_TYPE" == "STATIC" ]; then
|
|
iptables -t nat -A SQUID -i $1 -p tcp -d $RED_NETADDRESS/$RED_NETMASK --dport 80 -j RETURN
|
|
fi
|
|
|
|
iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 80 -j RETURN
|
|
|
|
iptables -t nat -A SQUID -i $1 -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
getpids "squid"
|
|
|
|
if [ -n "${pidlist}" ]; then
|
|
echo -e "Squid is already running with Process"\
|
|
"ID(s) ${pidlist}.${NORMAL}"
|
|
evaluate_retval
|
|
exit
|
|
fi
|
|
|
|
|
|
eval $(/usr/local/bin/readhash /var/ipfire/proxy/advanced/settings)
|
|
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
|
|
|
|
if [ -e /var/ipfire/proxy/enable -o -e /var/ipfire/proxy/enable_blue ]; then
|
|
|
|
# Add Address to errorpage stylesheet
|
|
sed "s|XXXhostXXX|$GREEN_ADDRESS|g" /var/ipfire/proxy/errorpage-$ERR_DESIGN.css > \
|
|
/etc/squid/errorpage.css
|
|
|
|
boot_mesg "Starting Squid Proxy Server..."
|
|
loadproc /usr/sbin/squid -z >/dev/null 2>&1
|
|
loadproc /usr/sbin/squid
|
|
fi
|
|
|
|
if [ -e /var/ipfire/proxy/transparent ]; then
|
|
transparent $GREEN_DEV
|
|
fi
|
|
if [ -e /var/ipfire/proxy/transparent_blue ]; then
|
|
transparent $BLUE_DEV
|
|
fi
|
|
;;
|
|
|
|
stop)
|
|
iptables -t nat -F SQUID
|
|
if [ -e /var/run/squid.pid ]; then
|
|
boot_mesg "Stopping Squid Proxy Server..."
|
|
squid -k shutdown >/dev/null 2>&1
|
|
evaluate_retval
|
|
|
|
# Stop squidGuard, updxlrator, squidclamav
|
|
# and redirect_wrappers.
|
|
killproc /usr/bin/squidGuard >/dev/null &
|
|
killproc /usr/sbin/updxlrator >/dev/null &
|
|
killproc /usr/bin/squidclamav >/dev/null &
|
|
killproc /usr/sbin/redirect_wrapper >/dev/null &
|
|
|
|
# Wait until all redirectors have been stopped.
|
|
wait
|
|
|
|
# If squid is still running, wait up to 30 seconds
|
|
# before we go on to kill it.
|
|
counter=30
|
|
|
|
while [ ${counter} -gt 0 ]; do
|
|
statusproc /usr/sbin/squid >/dev/null && break;
|
|
sleep 1
|
|
counter=$(( ${counter} - 1))
|
|
done
|
|
|
|
# Kill squid service, if still running.
|
|
killproc /usr/sbin/squid >/dev/null
|
|
|
|
# Trash remain pid file from squid.
|
|
rm -rf /var/run/squid.pid
|
|
fi
|
|
;;
|
|
|
|
restart)
|
|
$0 stop
|
|
sleep 5
|
|
$0 start
|
|
;;
|
|
|
|
reconfigure)
|
|
/usr/sbin/squid -k reconfigure
|
|
;;
|
|
|
|
status)
|
|
statusproc /usr/sbin/squid
|
|
statusproc /usr/lib/squid/unlinkd
|
|
;;
|
|
|
|
flush)
|
|
$0 stop
|
|
echo > /var/log/cache/swap.state
|
|
chown squid.squid /var/log/cache/swap.state
|
|
sleep 1
|
|
$0 start
|
|
;;
|
|
setperms)
|
|
chown -R nobody.squid /var/updatecache/
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|status|flush}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# End $rc_base/init.d/squid
|