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