#!/bin/sh /etc/rc.common START=80 USE_PROCD=1 PIDFILE=/var/run/privoxy.pid CFGFILE=/var/etc/privoxy.conf CFGTEMP=/var/etc/privoxy.conf.tmp _uci2conf() { local _LOGDIR="/var/log" # set default local _LOGFILE="privoxy.log" # set default # redefined callback for options when calling config_load option_cb() { # $1 name of variable # $2 value local __OPT="$1" local __VAL="$2" case $__OPT in logdir) # logdir handled later _LOGDIR="$__VAL" ;; logfile) # logfile handled later _LOGFILE="$__VAL" ;; *) # 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") # filter debug_* echo $__OPT | grep -i "debug_" >/dev/null 2>&1 && { [ $__VAL -eq 0 ] && return # not set ignore __VAL=$(echo $__OPT | sed -e "s#debug_##g") __OPT="debug" } # uci only accept "_" but we need "-" local __OPT=$(echo $__OPT | sed -e "s#_#-#g") # write to config echo -e "$__OPT\t$__VAL" >> $CFGTEMP ;; esac } mkdir -m0755 -p /var/etc echo "" > $CFGTEMP # create tmp config file chmod 644 $CFGTEMP # garantee that privoxy can read 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 config_load privoxy # calling above option_cb() # write logdir/logfile to config echo -e "logdir\t$_LOGDIR" >> $CFGTEMP echo -e "logfile\t$_LOGFILE" >> $CFGTEMP # create logfile and set permissions touch $_LOGDIR/$_LOGFILE chmod 664 $_LOGDIR/$_LOGFILE chown privoxy:privoxy $_LOGDIR/$_LOGFILE # move temp to final privoxy readable configuration mv -f $CFGTEMP $CFGFILE } # privoxy should auto-reload it's configuration # but it only reload on next connect to one of the listen_address # if we create a new listen_address privoxy never reload reload_service() { # so we restart here because rc.common reload_service only start without stopping restart "$@" # the following should normally work but see above # _uci2conf # convert uci config } service_triggers() { procd_add_reload_trigger "privoxy" } start_service() { # redefined callback for sections when calling config_load config_cb() { # $1 type of config section # $2 name of section [ "$1" = "interface" ] && \ procd_add_interface_trigger interface.* $2 /etc/init.d/privoxy restart } _uci2conf # convert uci config procd_open_instance procd_set_param command /usr/sbin/privoxy procd_append_param command --no-daemon # for procd run in foreground procd_append_param command --pidfile $PIDFILE # set pid file procd_append_param command --user privoxy.privoxy # set user procd_append_param command $CFGFILE # config file procd_set_param file $CFGFILE # set configration file procd_open_trigger # we need a restart on interface events not a reload config_load network # load network configuration and set trigger(s) in config_cb() above procd_close_trigger procd_close_instance } service_running() { logger_trick() { sleep 1 # give privoxy time to completely come up logger -p daemon.notice -t "privoxy[$(cat $PIDFILE)]" "Service started successfully" } logger_trick & } stop_service() { logger -p daemon.notice -t "privoxy[$(cat $PIDFILE)]" "Service shutdown" }