blob: ae493c2bd6326d57773b0ef8b1dfff3549910910 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2
3START=95
4STOP=10
5
6PIDFILE=/var/run/privoxy.pid
7CFGFILE=/var/etc/privoxy.conf
8CFGTEMP=/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
44 list_cb()
45 {
46 option_cb "$@"
47 }
48 fi
49 }
50
51 # temporary config file
52 # privoxy need read access
53 mkdir -m0755 -p /var/etc
54 echo "" > $CFGTEMP
55 chmod 644 $CFGTEMP
56 chgrp privoxy $CFGTEMP
57
58 echo '### AUTO-GENERATED CONFIGURATION' >> $CFGTEMP
59 echo '### USED BY PRIVOXY' >> $CFGTEMP
60 echo '### DO NOT EDIT' >> $CFGTEMP
61 echo '### SEE /etc/config/privoxy INSTEAD' >> $CFGTEMP
62 echo '' >> $CFGTEMP
63
64 # logdir and logfile
65 # privoxy needs read/write access
66 _LOGDIR=$(uci -q get privoxy.privoxy.logdir) || _LOGDIR="/var/log"
67 _LOGFILE=$(uci -q get privoxy.privoxy.logfile) || _LOGFILE="privoxy.log"
68 mkdir -m0755 -p $_LOGDIR
69 touch $_LOGDIR/$_LOGFILE
70 chmod 664 $_LOGDIR/$_LOGFILE
71 chown privoxy:privoxy $_LOGDIR/$_LOGFILE
72 echo -e "logdir\t$_LOGDIR" >> $CFGTEMP
73 echo -e "logfile\t$_LOGFILE" >> $CFGTEMP
74
75 # confdir
76 # privoxy needs read access (possibly write access)
77 _CONFDIR=$(uci -q get privoxy.privoxy.confdir) || _CONFDIR="/etc/privoxy"
78 chmod 755 $_CONFDIR
79 chmod 664 $_CONFDIR/*
80 chgrp privoxy $_CONFDIR $_CONFDIR/*
81 echo -e "confdir\t$_CONFDIR" >> $CFGTEMP
82
83 # templdir
84 # privoxy need read access
85 _TEMPLDIR=$(uci -q get privoxy.privoxy.templdir) # no default needed
86 if [ -z "$_TEMPLDIR" ]; then
87 chmod 755 $_CONFDIR/templates
88 chmod 644 $_CONFDIR/templates/*
89 chgrp privoxy $_CONFDIR/templates $_CONFDIR/templates/*
90 else
91 chmod 755 $_TEMPLDIR
92 chmod 644 $_TEMPLDIR/*
93 chgrp privoxy $_TEMPLDIR $_TEMPLDIR/*
94 echo -e "templdir\t$_TEMPLDIR" >> $CFGTEMP
95 fi
96
97 # temporary-directory
98 # privoxy needs read/write access
99 _TMP_DIR=$(uci -q get privoxy.privoxy.temporary_directory) # no default needed
100 if [ -n "$_TMP_DIR" ]; then
101 mkdir -m0750 -p $_TMP_DIR
102 chown privoxy:privoxy $_TMP_DIR
103 echo -e "temporary-directory\t$_TMP_DIR" >> $CFGTEMP
104 fi
105
106 config_load "privoxy" # calling above option_cb() and write the rest into $CFGTEMP
107
108 # move temp to final privoxy readable configuration
109 mv -f $CFGTEMP $CFGFILE
110 return 0
111}
112
113boot() {
114 # wait a given time (default 10 seconds) before startup
115 # to wait for interfaces to come up / not using hotplug events during boot
116 _start() {
117 [ $1 -gt 0 ] && {
118 logger -p daemon.info -t "privoxy[]" "Scheduled startup in $1 seconds"
119 sleep $1
120 }
121 start
122 }
123
124 local _DELAY
125 _DELAY=$(uci_get "privoxy" "system" "boot_delay" "10")
126 _start $_DELAY &
127 return 0
128}
129
130shutdown() {
131 rm -f /tmp/privoxy.hotplug
132 stop
133}
134
135start() {
136 # if already running do nothing
137 local _PID=$(cat $PIDFILE 2>/dev/null)
138 kill -1 $_PID 2>/dev/null && return 0
139
140 _uci2conf
141 /usr/sbin/privoxy --pidfile $PIDFILE --user privoxy.privoxy $CFGFILE
142 touch /tmp/privoxy.hotplug
143
144 # verify startup
145 _PID=$(cat $PIDFILE 2>/dev/null)
146 kill -1 $_PID 2>/dev/null
147 local _ERR=$?
148 [ $_ERR -eq 0 ] \
149 && logger -p daemon.notice -t "privoxy[$_PID]" "Started successfully"\
150 || logger -p daemon.warn -t "privoxy[]" "Failed to start"
151 return $_ERR
152}
153
154reload() {
155 # reload is also used by luci-app-privoxy
156 local _PID=$(cat $PIDFILE 2>/dev/null)
157 kill -1 $_PID 2>/dev/null
158 if [ $? -eq 0 ]; then
159 # only restart if already running
160 restart
161 else
162 # only start if enabled
163 enabled && start
164 fi
165 return 0
166}
167
168stop() {
169 local _PID=$(cat $PIDFILE 2>/dev/null)
170 kill -15 $_PID 2>/dev/null
171 sleep 1 # give time to shutdown
172 local _tmp=$(pgrep /usr/sbin/privoxy | tr "\n" " ")
173 if [ -z "$_tmp" ]; then
174 logger -p daemon.notice -t "privoxy[$_PID]" "Shutdown successfully"
175 else
176 kill -9 $_tmp # Normally never come here
177 logger -p daemon.warn -t "privoxy[$_tmp]" "Shutdown forced by KILL"
178 fi
179 return 0
180}