ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/privoxy/files/privoxy.init b/external/subpack/net/privoxy/files/privoxy.init
new file mode 100644
index 0000000..ae493c2
--- /dev/null
+++ b/external/subpack/net/privoxy/files/privoxy.init
@@ -0,0 +1,180 @@
+#!/bin/sh /etc/rc.common
+
+START=95
+STOP=10
+
+PIDFILE=/var/run/privoxy.pid
+CFGFILE=/var/etc/privoxy.conf
+CFGTEMP=/var/etc/privoxy.conf.tmp
+
+_uci2conf() {
+	# redefined callback for options when calling config_load
+	config_cb() {
+		if [ ."$2" != ."privoxy" ]; then
+			option_cb() { return 0; }
+		else
+			option_cb()
+			{
+				# $1	name of variable
+				# $2	value
+				local __OPT="$1"
+				local __VAL="$2"
+				case $__OPT in
+					confdir|templdir|temporary_directory|logdir|logfile)
+						# needs to be handled separately because we need to set permissions
+						# AND needs to be defined first because of a BUG inside privoxy
+						# require directories to be defined first inside config 
+						;;
+					debug_*)
+						[ $__VAL -eq 0 ] && return	# not set ignore
+						echo -e "debug\t$(echo $__OPT | sed -e 's#debug_##g')" >> $CFGTEMP ;;
+					*)
+						# detect list options (LENGTH) and ignore
+						echo $__OPT | grep -i "_LENGTH" >/dev/null 2>&1 && return
+						# detect list options (ITEM) and ignore
+						echo $__OPT | grep -i "_ITEM" >/dev/null 2>&1 && __OPT=$(echo $__OPT | sed -e "s#_ITEM.*##g")
+						# uci only accept "_" but we need "-"
+						local __OPT=$(echo $__OPT | sed -e "s#_#-#g")
+						# write to config
+						echo -e "$__OPT\t$__VAL" >> $CFGTEMP
+						;;
+				esac
+			}
+
+			list_cb()
+			{
+				option_cb "$@"
+			}
+		fi
+	}
+
+	# temporary config file
+	# privoxy need read access
+	mkdir -m0755 -p /var/etc
+	echo "" > $CFGTEMP
+	chmod 644 $CFGTEMP
+	chgrp privoxy $CFGTEMP
+
+	echo '### AUTO-GENERATED CONFIGURATION'	   >> $CFGTEMP
+	echo '### USED BY PRIVOXY'		   >> $CFGTEMP
+	echo '### DO NOT EDIT'			   >> $CFGTEMP
+	echo '### SEE /etc/config/privoxy INSTEAD' >> $CFGTEMP
+	echo ''					   >> $CFGTEMP
+
+	# logdir and logfile
+	# privoxy needs read/write access
+	_LOGDIR=$(uci -q get privoxy.privoxy.logdir)   || _LOGDIR="/var/log"
+	_LOGFILE=$(uci -q get privoxy.privoxy.logfile) || _LOGFILE="privoxy.log"
+	mkdir -m0755 -p $_LOGDIR
+	touch $_LOGDIR/$_LOGFILE
+	chmod 664 $_LOGDIR/$_LOGFILE
+	chown privoxy:privoxy $_LOGDIR/$_LOGFILE
+	echo -e "logdir\t$_LOGDIR" >> $CFGTEMP
+	echo -e "logfile\t$_LOGFILE" >> $CFGTEMP
+
+	# confdir
+	# privoxy needs read access (possibly write access)
+	_CONFDIR=$(uci -q get privoxy.privoxy.confdir) || _CONFDIR="/etc/privoxy"
+	chmod 755 $_CONFDIR
+	chmod 664 $_CONFDIR/*
+	chgrp privoxy $_CONFDIR $_CONFDIR/*
+	echo -e "confdir\t$_CONFDIR" >> $CFGTEMP
+
+	# templdir
+	# privoxy need read access
+	_TEMPLDIR=$(uci -q get privoxy.privoxy.templdir)	# no default needed
+	if [ -z "$_TEMPLDIR" ]; then
+		chmod 755 $_CONFDIR/templates
+		chmod 644 $_CONFDIR/templates/*
+		chgrp privoxy $_CONFDIR/templates $_CONFDIR/templates/*
+	else
+		chmod 755 $_TEMPLDIR
+		chmod 644 $_TEMPLDIR/*
+		chgrp privoxy $_TEMPLDIR $_TEMPLDIR/*
+		echo -e "templdir\t$_TEMPLDIR" >> $CFGTEMP
+	fi
+
+	# temporary-directory
+	# privoxy needs read/write access
+	_TMP_DIR=$(uci -q get privoxy.privoxy.temporary_directory)	# no default needed
+	if [ -n "$_TMP_DIR" ]; then
+		mkdir -m0750 -p $_TMP_DIR
+		chown privoxy:privoxy $_TMP_DIR
+		echo -e "temporary-directory\t$_TMP_DIR" >> $CFGTEMP
+	fi
+
+	config_load "privoxy"	# calling above option_cb() and write the rest into $CFGTEMP
+
+	# move temp to final privoxy readable configuration
+	mv -f $CFGTEMP $CFGFILE
+	return 0
+}
+
+boot() {
+	# wait a given time (default 10 seconds) before startup
+	# to wait for interfaces to come up / not using hotplug events during boot
+	_start() {
+		[ $1 -gt 0 ] && {
+			logger -p daemon.info -t "privoxy[]" "Scheduled startup in $1 seconds"
+			sleep $1
+		}
+		start
+	}
+
+	local _DELAY
+	_DELAY=$(uci_get "privoxy" "system" "boot_delay" "10")
+	_start $_DELAY &
+	return 0
+}
+
+shutdown() {
+	rm -f /tmp/privoxy.hotplug
+	stop
+}
+
+start() {
+	# if already running do nothing
+	local _PID=$(cat $PIDFILE 2>/dev/null)
+	kill -1 $_PID 2>/dev/null && return 0
+
+	_uci2conf
+	/usr/sbin/privoxy --pidfile $PIDFILE --user privoxy.privoxy $CFGFILE
+	touch /tmp/privoxy.hotplug
+
+	# verify startup
+	_PID=$(cat $PIDFILE 2>/dev/null)
+	kill -1 $_PID 2>/dev/null
+	local _ERR=$?
+	[ $_ERR -eq 0 ] \
+		&& logger -p daemon.notice -t "privoxy[$_PID]" "Started successfully"\
+		|| logger -p daemon.warn -t "privoxy[]" "Failed to start"
+	return $_ERR
+}
+
+reload() {
+	# reload is also used by luci-app-privoxy
+	local _PID=$(cat $PIDFILE 2>/dev/null)
+	kill -1 $_PID 2>/dev/null
+	if [ $? -eq 0 ]; then
+		# only restart if already running
+		restart
+	else
+		# only start if enabled
+		enabled && start
+	fi
+	return 0
+}
+
+stop() {
+	local _PID=$(cat $PIDFILE 2>/dev/null)
+	kill -15 $_PID 2>/dev/null
+	sleep 1			# give time to shutdown
+	local _tmp=$(pgrep /usr/sbin/privoxy | tr "\n" " ")
+	if [ -z "$_tmp" ]; then
+		logger -p daemon.notice -t "privoxy[$_PID]" "Shutdown successfully"
+	else
+		kill -9 $_tmp	# Normally never come here
+		logger -p daemon.warn -t "privoxy[$_tmp]" "Shutdown forced by KILL"
+	fi
+	return 0
+}