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