123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- #!/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
- }
- 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 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
- }
|