Merge pull request #2829 from miska/knot
[feed/packages.git] / net / adblock / files / adblock.init
1 #!/bin/sh /etc/rc.common
2 #
3
4 START=99
5 EXTRA_COMMANDS="toggle cfgup"
6 EXTRA_HELP=" toggle Toggle adblocking 'on' or 'off'
7 cfgup Update the adblock configuration file"
8
9 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
10
11 adb_debug=0
12 if [ $((adb_debug)) -eq 0 ]
13 then
14 exec 2>/dev/null
15 fi
16 adb_pid="${$}"
17 adb_script="/usr/bin/adblock-update.sh"
18 adb_dnsdir="/tmp/dnsmasq.d"
19 adb_dnshidedir="${adb_dnsdir}/.adb_hidden"
20 adb_dnsprefix="adb_list"
21 adb_pidfile="/var/run/adblock.pid"
22 adb_log="$(which logger)"
23 adb_uci="$(which uci)"
24
25 if [ -t 1 ]
26 then
27 log_parm="-s"
28 unset bg_parm
29 else
30 unset log_parm
31 bg_parm="&"
32 fi
33
34 if [ -r "${adb_pidfile}" ]
35 then
36 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile}))" 2>&1
37 exit 255
38 fi
39
40 rm_config()
41 {
42 local value opt section="${1}" options="adb_src_timestamp adb_src_count"
43 for opt in ${options}
44 do
45 "${adb_uci}" -q delete "adblock.${section}.${opt}"
46 done
47 }
48
49 boot()
50 {
51 return 0
52 }
53
54 start()
55 {
56 eval "${adb_script}" ${bg_parm}
57 return 0
58 }
59
60 restart()
61 {
62 restart="true"
63 stop
64 start
65 }
66
67 reload()
68 {
69 restart="true"
70 stop
71 start
72 }
73
74 stop()
75 {
76 cfg_check="$(${adb_uci} -q get "adblock.global.adb_overall_count")"
77 if [ -n "${cfg_check}" ]
78 then
79 . "/lib/functions.sh"
80 config_load adblock
81 config_foreach rm_config source
82 "${adb_uci}" -q delete "adblock.global.adb_dnstoggle"
83 "${adb_uci}" -q delete "adblock.global.adb_overall_count"
84 "${adb_uci}" -q delete "adblock.global.adb_percentage"
85 "${adb_uci}" -q delete "adblock.global.adb_lastrun"
86 if [ -z "${restart}" ]
87 then
88 "${adb_uci}" -q commit "adblock"
89 fi
90 fi
91 fw_check="$(iptables -w -t nat -nL | grep -F "adb-")"
92 if [ -n "${fw_check}" ] && [ -z "${restart}" ]
93 then
94 iptables-save -t nat | grep -Fv -- "adb-" | iptables-restore
95 iptables-save -t filter | grep -Fv -- "adb-" | iptables-restore
96 if [ -n "$(lsmod | grep -F "ip6table_nat")" ]
97 then
98 ip6tables-save -t nat | grep -Fv -- "adb-" | ip6tables-restore
99 ip6tables-save -t filter | grep -Fv -- "adb-" | ip6tables-restore
100 fi
101 fi
102 if [ -d "${adb_dnshidedir}" ]
103 then
104 find "${adb_dnshidedir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -exec mv -f "{}" "${adb_dnsdir}" \;
105 fi
106 dns_check="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -print -exec rm -f "{}" \;)"
107 if [ -n "${dns_check}" ]
108 then
109 rm -rf "${adb_dnshidedir}"
110 /etc/init.d/dnsmasq restart
111 fi
112 www_check="$(pgrep -f "uhttpd -h /www/adblock")"
113 if [ -n "${www_check}" ]
114 then
115 for pid in ${www_check}
116 do
117 kill -9 "${pid}"
118 done
119 fi
120 if [ -n "${cfg_check}" ] || [ -n "${fw_check}" ] || [ -n "${dns_check}" ] || [ -n "${www_check}" ]
121 then
122 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] info " "all adblock related services stopped" 2>&1
123 fi
124 return 0
125 }
126
127 toggle()
128 {
129 if [ "$(${adb_uci} -q get "adblock.global.adb_restricted")" = "1" ]
130 then
131 adb_uci="$(which true)"
132 fi
133 if [ -d "${adb_dnshidedir}" ]
134 then
135 list_dns="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -print)"
136 list_dnshide="$(find "${adb_dnshidedir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -print)"
137 if [ -n "${list_dns}" ]
138 then
139 mv -f "${adb_dnsdir}/${adb_dnsprefix}"* "${adb_dnshidedir}"
140 "${adb_uci}" -q set "adblock.global.adb_dnstoggle=off"
141 "${adb_uci}" -q commit "adblock"
142 /etc/init.d/dnsmasq restart
143 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] info " "toggle for adblocking switched 'off'" 2>&1
144 elif [ -n "${list_dnshide}" ]
145 then
146 mv -f "${adb_dnshidedir}/${adb_dnsprefix}"* "${adb_dnsdir}"
147 "${adb_uci}" -q set "adblock.global.adb_dnstoggle=on"
148 "${adb_uci}" -q commit "adblock"
149 /etc/init.d/dnsmasq restart
150 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] info " "toggle for adblocking switched 'on'" 2>&1
151 fi
152 fi
153 return 0
154 }
155
156 cfgup()
157 {
158 stop
159 cp -pf "/etc/adblock/adblock.conf.default" "/etc/config/adblock"
160 rc=$?
161 if [ $((rc)) -eq 0 ]
162 then
163 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] info " "default adblock configuration applied, please check the settings in '/etc/config/adblock'" 2>&1
164 else
165 "${adb_log}" ${log_parm} -t "adblock[${adb_pid}] info " "default adblock configuration not found, please re-install the package via 'opkg install adblock --force-maintainer'" 2>&1
166 fi
167 }