privoxy.init (4774B)
1 #!/bin/sh /etc/rc.common 2 3 START=95 4 STOP=10 5 6 PIDFILE=/var/run/privoxy.pid 7 CFGFILE=/var/etc/privoxy.conf 8 CFGTEMP=/var/etc/privoxy.conf.tmp 9 10 _uci2conf() { 11 # redefined callback for options when calling config_load 12 config_cb() { 13 if [ ."$2" != ."privoxy" ]; then 14 option_cb() { return 0; } 15 else 16 option_cb() 17 { 18 # $1 name of variable 19 # $2 value 20 local __OPT="$1" 21 local __VAL="$2" 22 case $__OPT in 23 confdir|templdir|temporary_directory|logdir|logfile) 24 # needs to be handled separately because we need to set permissions 25 # AND needs to be defined first because of a BUG inside privoxy 26 # require directories to be defined first inside config 27 ;; 28 debug_*) 29 [ $__VAL -eq 0 ] && return # not set ignore 30 echo -e "debug\t$(echo $__OPT | sed -e 's#debug_##g')" >> $CFGTEMP ;; 31 *) 32 # detect list options (LENGTH) and ignore 33 echo $__OPT | grep -i "_LENGTH" >/dev/null 2>&1 && return 34 # detect list options (ITEM) and ignore 35 echo $__OPT | grep -i "_ITEM" >/dev/null 2>&1 && __OPT=$(echo $__OPT | sed -e "s#_ITEM.*##g") 36 # uci only accept "_" but we need "-" 37 local __OPT=$(echo $__OPT | sed -e "s#_#-#g") 38 # write to config 39 echo -e "$__OPT\t$__VAL" >> $CFGTEMP 40 ;; 41 esac 42 } 43 fi 44 } 45 46 # temporary config file 47 # privoxy need read access 48 mkdir -m0755 -p /var/etc 49 echo "" > $CFGTEMP 50 chmod 644 $CFGTEMP 51 chgrp privoxy $CFGTEMP 52 53 echo '### AUTO-GENERATED CONFIGURATION' >> $CFGTEMP 54 echo '### USED BY PRIVOXY' >> $CFGTEMP 55 echo '### DO NOT EDIT' >> $CFGTEMP 56 echo '### SEE /etc/config/privoxy INSTEAD' >> $CFGTEMP 57 echo '' >> $CFGTEMP 58 59 # logdir and logfile 60 # privoxy needs read/write access 61 _LOGDIR=$(uci -q get privoxy.privoxy.logdir) || _LOGDIR="/var/log" 62 _LOGFILE=$(uci -q get privoxy.privoxy.logfile) || _LOGFILE="privoxy.log" 63 mkdir -m0755 -p $_LOGDIR 64 touch $_LOGDIR/$_LOGFILE 65 chmod 664 $_LOGDIR/$_LOGFILE 66 chown privoxy:privoxy $_LOGDIR/$_LOGFILE 67 echo -e "logdir\t$_LOGDIR" >> $CFGTEMP 68 echo -e "logfile\t$_LOGFILE" >> $CFGTEMP 69 70 # confdir 71 # privoxy needs read access (possibly write access) 72 _CONFDIR=$(uci -q get privoxy.privoxy.confdir) || _CONFDIR="/etc/privoxy" 73 chmod 755 $_CONFDIR 74 chmod 664 $_CONFDIR/* 75 chgrp privoxy $_CONFDIR $_CONFDIR/* 76 echo -e "confdir\t$_CONFDIR" >> $CFGTEMP 77 78 # templdir 79 # privoxy need read access 80 _TEMPLDIR=$(uci -q get privoxy.privoxy.templdir) # no default needed 81 if [ -z "$_TEMPLDIR" ]; then 82 chmod 755 $_CONFDIR/templates 83 chmod 644 $_CONFDIR/templates/* 84 chgrp privoxy $_CONFDIR/templates $_CONFDIR/templates/* 85 else 86 chmod 755 $_TEMPLDIR 87 chmod 644 $_TEMPLDIR/* 88 chgrp privoxy $_TEMPLDIR $_TEMPLDIR/* 89 echo -e "templdir\t$_TEMPLDIR" >> $CFGTEMP 90 fi 91 92 # temporary-directory 93 # privoxy needs read/write access 94 _TMP_DIR=$(uci -q get privoxy.privoxy.temporary_directory) # no default needed 95 if [ -n "$_TMP_DIR" ]; then 96 mkdir -m0750 -p $_TMP_DIR 97 chown privoxy:privoxy $_TMP_DIR 98 echo -e "temporary-directory\t$_TMP_DIR" >> $CFGTEMP 99 fi 100 101 config_load "privoxy" # calling above option_cb() and write the rest into $CFGTEMP 102 103 # move temp to final privoxy readable configuration 104 mv -f $CFGTEMP $CFGFILE 105 return 0 106 } 107 108 boot() { 109 # wait a given time (default 10 seconds) before startup 110 # to wait for interfaces to come up / not using hotplug events during boot 111 _start() { 112 [ $1 -gt 0 ] && { 113 logger -p daemon.info -t "privoxy[]" "Scheduled startup in $1 seconds" 114 sleep $1 115 } 116 start 117 } 118 119 local _DELAY 120 _DELAY=$(uci_get "privoxy" "system" "boot_delay" "10") 121 _start $_DELAY & 122 return 0 123 } 124 125 shutdown() { 126 rm -f /tmp/privoxy.hotplug 127 stop 128 } 129 130 start() { 131 # if already running do nothing 132 local _PID=$(cat $PIDFILE 2>/dev/null) 133 kill -1 $_PID 2>/dev/null && return 0 134 135 _uci2conf 136 /usr/sbin/privoxy --pidfile $PIDFILE --user privoxy.privoxy $CFGFILE 137 touch /tmp/privoxy.hotplug 138 139 # verify startup 140 _PID=$(cat $PIDFILE 2>/dev/null) 141 kill -1 $_PID 2>/dev/null 142 local _ERR=$? 143 [ $_ERR -eq 0 ] \ 144 && logger -p daemon.notice -t "privoxy[$_PID]" "Started successfully"\ 145 || logger -p daemon.warn -t "privoxy[]" "Failed to start" 146 return $_ERR 147 } 148 149 reload() { 150 # reload is also used by luci-app-privoxy 151 local _PID=$(cat $PIDFILE 2>/dev/null) 152 kill -1 $_PID 2>/dev/null 153 if [ $? -eq 0 ]; then 154 # only restart if already running 155 restart 156 else 157 # only start if enabled 158 enabled && start 159 fi 160 return 0 161 } 162 163 stop() { 164 local _PID=$(cat $PIDFILE 2>/dev/null) 165 kill -15 $_PID 2>/dev/null 166 sleep 1 # give time to shutdown 167 local _tmp=$(pgrep privoxy | tr "\n" " ") 168 if [ -z "$_tmp" ]; then 169 logger -p daemon.notice -t "privoxy[$_PID]" "Shutdown successfully" 170 else 171 kill -9 $_tmp # Normally never come here 172 logger -p daemon.warn -t "privoxy[$_tmp]" "Shutdown forced by KILL" 173 fi 174 return 0 175 }