@ -6,12 +6,15 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# (s)hellcheck exceptions
# shellcheck disable=1091 disable=2039 disable=2143 disable=2181 disable=2188
# set initial defaults
#
LC_ALL = C
PATH = "/usr/sbin:/usr/bin:/sbin:/bin"
adb_ver = "3.8.2 "
adb_sys ver = "unknown "
adb_ver = "3.8.3 "
adb_base ver = ""
adb_enabled = 0
adb_debug = 0
adb_forcedns = 0
@ -38,29 +41,22 @@ adb_repdir="/tmp"
adb_reputil = " $( command -v tcpdump) "
adb_repchunkcnt = "5"
adb_repchunksize = "1"
adb_cnt = ""
adb_rc = 0
adb_action = " ${ 1 :- "start" } "
adb_pidfile = "/var/run/adblock.pid"
adb_ubusservice = "/etc/adblock/adblock.service"
adb_mailservice = "/etc/adblock/adblock.mail"
adb_sources = ""
adb_cnt = ""
# load adblock environment
#
f_load( )
{
local dns_up sys_call sys_desc sys_model cnt = 0
local dns_up cnt = 0
# get system information
#
sys_call = " $( ubus -S call system board 2>/dev/null) "
if [ -n " ${ sys_call } " ]
then
sys_desc = " $( printf "%s" " ${ sys_call } " | jsonfilter -e '@.release.description' ) "
sys_model = " $( printf "%s" " ${ sys_call } " | jsonfilter -e '@.model' ) "
adb_sysver = " ${ sys_model } , ${ sys_desc } "
fi
adb_sysver = " $( ubus -S call system board 2>/dev/null | jsonfilter -e '@.model' -e '@.release.description' | awk '{ORS="\n";printf"%s, ",$0}' ) "
# parse 'global' and 'extra' section by callback
#
@ -131,7 +127,6 @@ f_load()
adb_dnsallow = ""
; ;
"unbound" )
adb_dnsinstance = " ${ adb_dnsinstance :- "0" } "
adb_dnsuser = " ${ adb_dnsuser :- "unbound" } "
adb_dnsdir = " ${ adb_dnsdir :- "/var/lib/unbound" } "
adb_dnsheader = ""
@ -139,7 +134,6 @@ f_load()
adb_dnsallow = "awk '{print \"local-zone: \\042\"\$0\"\\042 transparent\"}'"
; ;
"named" )
adb_dnsinstance = " ${ adb_dnsinstance :- "0" } "
adb_dnsuser = " ${ adb_dnsuser :- "bind" } "
adb_dnsdir = " ${ adb_dnsdir :- "/var/lib/bind" } "
adb_dnsheader = "\$TTL 2h" $'\n' "@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)" $'\n' " IN NS localhost."
@ -147,7 +141,6 @@ f_load()
adb_dnsallow = "awk '{print \"\"\$0\" CNAME rpz-passthru.\\n*.\"\$0\" CNAME rpz-passthru.\"}'"
; ;
"kresd" )
adb_dnsinstance = " ${ adb_dnsinstance :- "0" } "
adb_dnsuser = " ${ adb_dnsuser :- "root" } "
adb_dnsdir = " ${ adb_dnsdir :- "/etc/kresd" } "
adb_dnsheader = "\$TTL 2h" $'\n' "@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)" $'\n' " IN NS localhost."
@ -177,7 +170,7 @@ f_load()
if [ " ${ adb_action } " = "start" ] && [ " ${ adb_trigger } " = "timed" ]
then
sleep ${ adb_triggerdelay }
sleep " ${ adb_triggerdelay } "
fi
while [ " ${ cnt } " -le 30 ]
@ -191,7 +184,7 @@ f_load()
cnt = $(( cnt+1))
done
if [ " ${ dns_up } " != "true" ] || [ -z " ${ adb_dns } " ] || [ ! -x " $( command -v ${ adb_dns } ) " ]
if [ " ${ dns_up } " != "true" ] || [ -z " ${ adb_dns } " ] || [ ! -x " $( command -v " ${ adb_dns } " ) " ]
then
f_log "err" " ' ${ adb_dns } ' not running or executable "
elif [ ! -d " ${ adb_dnsdir } " ]
@ -220,7 +213,7 @@ f_env()
# check fetch utility
#
case " ${ adb_fetchutil } " in
uclient-fetch)
" uclient-fetch" )
if [ -f "/lib/libustream-ssl.so" ]
then
adb_fetchparm = " ${ adb_fetchparm :- "--timeout=10 --no-check-certificate -O" } "
@ -229,21 +222,21 @@ f_env()
adb_fetchparm = " ${ adb_fetchparm :- "--timeout=10 -O" } "
fi
; ;
wget)
" wget" )
adb_fetchparm = " ${ adb_fetchparm :- "--no-cache --no-cookies --max-redirect=0 --timeout=10 --no-check-certificate -O" } "
ssl_lib = "built-in"
; ;
wget-nossl)
" wget-nossl" )
adb_fetchparm = " ${ adb_fetchparm :- "--no-cache --no-cookies --max-redirect=0 --timeout=10 -O" } "
; ;
busybox)
" busybox" )
adb_fetchparm = " ${ adb_fetchparm :- "-O" } "
; ;
curl)
" curl" )
adb_fetchparm = " ${ adb_fetchparm :- "--connect-timeout 10 --insecure -o" } "
ssl_lib = "built-in"
; ;
aria2c)
" aria2c" )
adb_fetchparm = " ${ adb_fetchparm :- "--timeout=10 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o" } "
ssl_lib = "built-in"
; ;
@ -294,13 +287,13 @@ f_rmdns()
{
if [ -n " ${ adb_dns } " ]
then
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } " /" ${ adb_dnsfile } "
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } / ${ adb_dnsfile } "
> " ${ adb_rtfile } "
rm -f " ${ adb_backupdir } " /" ${ adb_dnsprefix } " *" .gz"
f_dnsup
rm -f " ${ adb_backupdir } / ${ adb_dnsprefix } " *.gz
f_dnsup 4
f_rmtemp
fi
f_log "debug" " f_rmdns ::: dns: ${ adb_dns } , dns_dir: ${ adb_dnsdir } , dns_prefix: ${ adb_dnsprefix } , dns_ file: ${ adb_dnsfile } , rt_file: ${ adb_rtfile } , backup_dir: ${ adb_backupdir } "
f_log "debug" " f_rmdns ::: dns: ${ adb_dns } , dns_dir: ${ adb_dnsdir } , dns_file: ${ adb_dnsfile } , rt_file: ${ adb_rtfile } , backup_dir: ${ adb_backupdir } "
}
# commit uci changes
@ -317,13 +310,13 @@ f_uci()
uci_commit " ${ config } "
case " ${ config } " in
"firewall" )
/etc/init.d/firewall reload >/dev/null 2>& 1
" /etc/init.d/firewall" reload >/dev/null 2>& 1
; ;
* )
> " ${ adb_dnsdir } / ${ adb_dnsfile } "
"dhcp" | "resolver" )
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } / ${ adb_dnsfile } "
f_count
f_jsnup "running"
/etc/init.d/ " ${ adb_dns } " reload >/dev/null 2>& 1
" /etc/init.d/ ${ adb_dns } " reload >/dev/null 2>& 1
; ;
esac
fi
@ -331,45 +324,64 @@ f_uci()
fi
}
# list/overall count
# set/reset the global counter
#
f_count( )
{
local mode = " ${ 1 } "
adb_cnt = 0
if [ -s " ${ adb_dnsdir } / ${ adb_dnsfile } " ] && { [ -z " ${ mode } " ] || [ " ${ mode } " = "final" ] ; }
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
if [ -s " ${ adb_tmpdir } /tmp.add.whitelist " ]
then
adb_cnt = " $(( adb_cnt-$( wc -l 2>/dev/null < " ${ adb_tmpdir } /tmp.add.whitelist " ) )) "
fi
if [ " ${ adb_dns } " = "named" ] || [ " ${ adb_dns } " = "kresd" ] || { [ " ${ adb_dns } " = "dnsmasq" ] && [ " ${ adb_dnsvariant } " = "null (IPv4/IPv6)" ] ; }
then
adb_cnt = " $(( ( adb_cnt-$( printf "%s" " ${ adb_dnsheader } " | grep -c "^" ) ) / 2 )) "
fi
elif [ " ${ mode } " = "blacklist" ] && [ -s " ${ adb_tmpfile } .blacklist " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpfile } .blacklist " ) "
elif [ " ${ mode } " = "whitelist" ] && [ -s " ${ adb_tmpdir } /tmp.raw.whitelist " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpdir } /tmp.raw.whitelist " ) "
elif [ -s " ${ adb_tmpfile } " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpfile } " ) "
fi
case " ${ mode } " in
"blacklist" )
if [ -s " ${ adb_tmpfile } .blacklist " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpfile } .blacklist " ) "
fi
; ;
"whitelist" )
if [ -s " ${ adb_tmpdir } /tmp.raw.whitelist " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpdir } /tmp.raw.whitelist " ) "
fi
; ;
"merge" )
if [ -s " ${ adb_tmpdir } / ${ adb_dnsfile } " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpdir } / ${ adb_dnsfile } " ) "
fi
; ;
"download" | "restore" )
if [ -s " ${ src_tmpfile } " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ src_tmpfile } " ) "
fi
; ;
"final" )
if [ -s " ${ adb_dnsdir } / ${ adb_dnsfile } " ]
then
adb_cnt = " $( wc -l 2>/dev/null < " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
if [ -s " ${ adb_tmpdir } /tmp.add.whitelist " ]
then
adb_cnt = " $(( adb_cnt-$( wc -l 2>/dev/null < " ${ adb_tmpdir } /tmp.add.whitelist " ) )) "
fi
if [ " ${ adb_dns } " = "named" ] || [ " ${ adb_dns } " = "kresd" ] || { [ " ${ adb_dns } " = "dnsmasq" ] && [ " ${ adb_dnsvariant } " = "null (IPv4/IPv6)" ] ; }
then
adb_cnt = " $(( ( adb_cnt-$( printf "%s" " ${ adb_dnsheader } " | grep -c "^" ) ) / 2 )) "
fi
fi
; ;
esac
}
# set external config options
#
f_extconf( )
{
local uci_config port port_list = "53 853 5353"
local config port port_list = "53 853 5353"
case " ${ adb_dns } " in
"dnsmasq" )
uci_config = "dhcp"
config = "dhcp"
if [ " ${ adb_dnsvariant } " = "nxdomain" ]
then
if [ " ${ adb_enabled } " -eq 1 ] && [ -z " $( uci_get dhcp " @dnsmasq[ ${ adb_dnsinstance } ] " serversfile | grep -Fo " ${ adb_dnsdir } / ${ adb_dnsfile } " ) " ]
@ -399,7 +411,7 @@ f_extconf()
fi
; ;
"kresd" )
uci_ config= "resolver"
config = "resolver"
if [ " ${ adb_enabled } " -eq 1 ] && [ -z " $( uci_get resolver kresd rpz_file | grep -Fo " ${ adb_dnsdir } / ${ adb_dnsfile } " ) " ]
then
uci -q add_list resolver.kresd.rpz_file= " ${ adb_dnsdir } / ${ adb_dnsfile } "
@ -416,9 +428,9 @@ f_extconf()
fi
; ;
esac
f_uci " ${ uci_ config} "
f_uci " ${ config } "
uci_ config= "firewall"
config = "firewall"
if [ " ${ adb_enabled } " -eq 1 ] && [ " ${ adb_forcedns } " -eq 1 ] && \
[ -z " $( uci_get firewall adblock_dns_53) " ] && [ " $( /etc/init.d/firewall enabled; printf "%u" ${ ? } ) " -eq 0 ]
then
@ -439,66 +451,66 @@ f_extconf()
uci_remove firewall " adblock_dns_ ${ port } "
done
fi
f_uci " ${ uci_ config} "
f_uci " ${ config } "
}
# restart of the dns backend
#
f_dnsup( )
{
local dns_service dns_up dns_pid dns_procfile cache_util cache_rc cnt = 0
local dns_service dns_up dns_pid dns_procfile cache_util cache_rc cnt = 0 out_rc = 4 in_rc = " ${ 1 :- 0 } "
if [ " ${ adb_dnsflush } " -eq 0 ] && [ " ${ adb_enabled } " -eq 1 ] && [ " ${ adb_rc } " -eq 0 ]
if [ " ${ in_rc } " -eq 0 ] && [ " ${ adb_dnsflush } " -eq 0 ] && [ " ${ adb_enabled } " -eq 1 ]
then
case " ${ adb_dns } " in
"dnsmasq" )
killall -q -HUP " ${ adb_dns } "
cache_rc = ${ ? }
cache_rc = " ${ ? } "
; ;
"unbound" )
cache_util = " $( command -v unbound-control) "
if [ -x " ${ cache_util } " ] && [ -d " ${ adb_tmpdir } " ] && [ -f " ${ adb_dnsdir } " /unbound.conf ]
if [ -x " ${ cache_util } " ] && [ -d " ${ adb_tmpdir } " ] && [ -f " ${ adb_dnsdir } /unbound.conf " ]
then
" ${ cache_util } " -c " ${ adb_dnsdir } " /unbound.conf dump_cache > " ${ adb_tmpdir } " /adb_cache.dump 2>/dev/null
" ${ cache_util } " -c " ${ adb_dnsdir } /unbound.conf " dump_cache > " ${ adb_tmpdir } /adb_cache.dump " 2>/dev/null
fi
" /etc/init.d/ ${ adb_dns } " restart >/dev/null 2>& 1
; ;
"kresd" )
cache_util = "keep_cache"
" /etc/init.d/ ${ adb_dns } " restart >/dev/null 2>& 1
cache_rc = ${ ? }
cache_rc = " ${ ? } "
; ;
"named" )
cache_util = " $( command -v rndc) "
if [ -x " ${ cache_util } " ] && [ -f /etc/bind/rndc.conf ]
if [ -x " ${ cache_util } " ] && [ -f " /etc/bind/rndc.conf" ]
then
" ${ cache_util } " -c /etc/bind/rndc.conf reload >/dev/null 2>& 1
cache_rc = ${ ? }
" ${ cache_util } " -c " /etc/bind/rndc.conf" reload >/dev/null 2>& 1
cache_rc = " ${ ? } "
else
" /etc/init.d/ ${ adb_dns } " restart >/dev/null 2>& 1
fi
; ;
esac
else
" /etc/init.d/ ${ adb_dns } " restart >/dev/null 2>& 1
fi
adb_rc = 1
while [ " ${ cnt } " -le 10 ]
do
dns_service = " $( ubus -S call service list " {\"name\":\" ${ adb_dns } \"} " ) "
dns_up = " $( printf "%s" " ${ dns_service } " | jsonfilter -l1 -e " @[\" ${ adb_dns } \"].instances.*.running " ) "
dns_pid = " $( printf "%s" " ${ dns_service } " | jsonfilter -l1 -e " @[\" ${ adb_dns } \"].instances.*.pid " ) "
dns_procfile = " $( ls -l /proc/${ dns_pid } /fd 2>/dev/null | grep -Fo " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
dns_procfile = " $( ls -l " /proc/${ dns_pid } /fd" 2>/dev/null | grep -Fo " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
if [ " ${ dns_up } " = "true" ] && [ -n " ${ dns_pid } " ] && [ -z " ${ dns_procfile } " ]
then
case " ${ adb_dns } " in
"unbound" )
cache_util = " $( command -v unbound-control) "
if [ -x " ${ cache_util } " ] && [ -d " ${ adb_tmpdir } " ] && [ -s " ${ adb_tmpdir } " /adb_cache.dump ]
if [ -x " ${ cache_util } " ] && [ -d " ${ adb_tmpdir } " ] && [ -s " ${ adb_tmpdir } /adb_cache.dump " ]
then
while [ " ${ cnt } " -le 10 ]
do
" ${ cache_util } " -c " ${ adb_dnsdir } " /unbound.conf load_cache < " ${ adb_tmpdir } " /adb_cache.dump >/dev/null 2>& 1
cache_rc = ${ ? }
" ${ cache_util } " -c " ${ adb_dnsdir } /unbound.conf " load_cache < " ${ adb_tmpdir } /adb_cache.dump " >/dev/null 2>& 1
cache_rc = " ${ ? } "
if [ " ${ cache_rc } " -eq 0 ]
then
break
@ -509,90 +521,95 @@ f_dnsup()
fi
; ;
esac
adb _rc= 0
out _rc= 0
break
fi
cnt = $(( cnt+1))
sleep 1
done
f_log "debug" " f_dnsup ::: cache_util: ${ cache_util :- "-" } , cache_rc: ${ cache_rc :- "-" } , cache_flush: ${ adb_dnsflush } , cache_cnt: ${ cnt } , rc: ${ adb _rc} "
return ${ adb_rc }
f_log "debug" " f_dnsup ::: cache_util: ${ cache_util :- "-" } , cache_flush: ${ adb_dnsflush } , cache_ rc: ${ cache_rc :- 0 } , dns_cnt: ${ cnt } , in_rc: ${ in_rc } , out_ rc: ${ out _rc} "
return " ${ out_rc } "
}
# backup/restore/remove blocklists
#
f_list( )
{
local file name tmp_file = " ${ adb_tmpfile } " mode = " ${ 1 } " in_rc = " ${ adb_rc } "
local file name out_rc mode = " ${ 1 } " in_rc = " ${ src_rc :- 0 } "
case " ${ mode } " in
"blacklist" )
if [ -s " ${ adb_blacklist } " ]
"blacklist" | "whitelist" )
if [ " ${ mode } " = "blacklist" ] && [ -s " ${ adb_blacklist } " ]
then
src_name = " ${ mode } "
adb_blacklist_rset = " /^([[:alnum:]_-]+\\.)+[[:alpha:]]+([[:space:]]| $)/{print tolower(\$1)} "
awk " ${ adb_blacklist_rset } " " ${ adb_blacklist } " > " ${ adb_tmpfile } " ." ${ src_name } "
fi
; ;
"whitelist" )
if [ -s " ${ adb_whitelist } " ]
awk " ${ adb_blacklist_rset } " " ${ adb_blacklist } " > " ${ adb_tmpfile } . ${ mode } "
out_rc = " ${ ? } "
elif [ " ${ mode } " = "whitelist" ] && [ -s " ${ adb_whitelist } " ]
then
src_name = " ${ mode } "
adb_whitelist_rset = " /^([[:alnum:]_-]+\\.)+[[:alpha:]]+([[:space:]]| $)/{print tolower(\$1)} "
awk " ${ adb_whitelist_rset } " " ${ adb_whitelist } " > " ${ adb_tmpdir } " /tmp.raw." ${ src_name } "
adb_whitelist_rset = " /^([[:alnum:]_-]+\\.)+[[:alpha:]]+([[:space:]]| $)/{gsub(\"\\\.\",\"\\\.\",\$1);print tolower(\"^\"\$1\"\\\|\\\.\"\$1)} "
awk " ${ adb_whitelist_rset } " " ${ adb_tmpdir } " /tmp.raw." ${ src_name } " > " ${ adb_tmpdir } " /tmp.rem." ${ src_name } "
if [ -n " ${ adb_dnsallow } " ]
awk " ${ adb_whitelist_rset } " " ${ adb_whitelist } " > " ${ adb_tmpdir } /tmp.raw. ${ mode } "
out_rc = " ${ ? } "
if [ " ${ out_rc } " -eq 0 ]
then
eval " ${ adb_dnsallow } " " ${ adb_tmpdir } " /tmp.raw." ${ src_name } " > " ${ adb_tmpdir } " /tmp.add." ${ src_name } "
adb_whitelist_rset = " /^([[:alnum:]_-]+\\.)+[[:alpha:]]+([[:space:]]| $)/{gsub(\"\\\\.\",\"\\\\.\",\$1);print tolower(\"^\"\$1\"\\\\|\\\\.\"\$1)} "
awk " ${ adb_whitelist_rset } " " ${ adb_tmpdir } /tmp.raw. ${ mode } " > " ${ adb_tmpdir } /tmp.rem. ${ mode } "
out_rc = " ${ ? } "
if [ " ${ out_rc } " -eq 0 ] && [ -n " ${ adb_dnsallow } " ]
then
eval " ${ adb_dnsallow } " " ${ adb_tmpdir } /tmp.raw. ${ mode } " > " ${ adb_tmpdir } /tmp.add. ${ mode } "
out_rc = " ${ ? } "
fi
fi
fi
; ;
"backup" )
if [ -d " ${ adb_backupdir } " ]
then
gzip -cf " ${ adb_tmpfile } " 2>/dev/null > " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz "
adb_rc = ${ ? }
gzip -cf " ${ src _tmpfile} " 2>/dev/null > " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz "
out_rc = " ${ ? } "
fi
; ;
"restore" )
if [ -d " ${ adb_backupdir } " ]
then
if [ -n " ${ src_name } " ] && [ -f " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz " ]
if [ -n " ${ src_name } " ] && [ -s " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz " ]
then
zcat " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz " 2>/dev/null > " ${ adb_tmpfile } "
else
for file in " ${ adb_backupdir } / ${ adb_dnsprefix } . " *".gz"
zcat " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz " 2>/dev/null > " ${ src_tmpfile } "
out_rc = " ${ ? } "
elif [ -z " ${ src_name } " ]
then
for file in " ${ adb_backupdir } / ${ adb_dnsprefix } " .*.gz
do
name = " ${ file ##*/ } "
name = " ${ name %.* } "
zcat " ${ file } " 2>/dev/null > " ${ adb_tmpfile } " ." ${ name } "
zcat " ${ file } " 2>/dev/null > " ${ adb_tmpfile } . ${ name } "
out_rc = " ${ ? } "
if [ " ${ out_rc } " -ne 0 ]
then
break
fi
done
fi
adb_rc = ${ ? }
fi
; ;
"remove" )
if [ -d " ${ adb_backupdir } " ]
if [ -d " ${ adb_backupdir } " ] && [ -f " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz " ]
then
rm -f " ${ adb_backupdir } / ${ adb_dnsprefix } . ${ src_name } .gz "
out_rc = " ${ ? } "
fi
adb_rc = ${ ? }
; ;
"merge" )
for file in " ${ adb_tmpfile } " .*
do
cat " ${ file } " 2>/dev/null >> " ${ adb_tmpdir } / ${ adb_dnsfile } "
if [ " ${ ? } " -ne 0 ]
out_rc = " ${ ? } "
if [ " ${ out_rc } " -ne 0 ]
then
adb_rc = ${ ? }
break
fi
rm -f " ${ file } "
done
adb_tmpfile = " ${ adb_tmpdir } / ${ adb_dnsfile } "
; ;
"final" )
> " ${ adb_dnsdir } / ${ adb_dnsfile } "
@ -609,16 +626,21 @@ f_list()
eval " ${ adb_dnsdeny } " " ${ adb_tmpdir } / ${ adb_dnsfile } " >> " ${ adb_dnsdir } / ${ adb_dnsfile } "
fi
if [ " ${ ? } " -eq 0 ] && [ -n " ${ adb_dnsheader } " ]
if [ -n " ${ adb_dnsheader } " ]
then
printf "%s\\n" " ${ adb_dnsheader } " | cat - " ${ adb_dnsdir } / ${ adb_dnsfile } " > " ${ adb_tmpdir } / ${ adb_dnsfile } "
mv -f " ${ adb_tmpdir } / ${ adb_dnsfile } " " ${ adb_dnsdir } / ${ adb_dnsfile } "
fi
adb_rc = ${ ? }
out_rc = " ${ ? } "
; ;
esac
if [ -z " ${ out_rc } " ]
then
out_rc = " ${ in_rc } "
fi
f_count " ${ mode } "
f_log "debug" " f_list ::: name: ${ src_name :- "-" } , mode: ${ mode } , cnt: ${ adb_cnt } , in_rc: ${ in_rc } , out_rc: ${ adb_rc } "
f_log "debug" " f_list ::: name: ${ src_name :- "-" } , mode: ${ mode } , cnt: ${ adb_cnt } , in_rc: ${ in_rc } , out_rc: ${ out_rc } "
return " ${ out_rc } "
}
# top level domain compression
@ -643,7 +665,7 @@ f_tld()
awk 'BEGIN{FS="."}{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' " ${ temp_tld } " > " ${ source } "
if [ " ${ ? } " -eq 0 ]
then
rm -f " ${ temp_src } " " ${ temp_ tld } "
rm -f " ${ temp_tld } "
cnt_tld = " $( wc -l 2>/dev/null < " ${ source } " ) "
tld_ok = "true"
fi
@ -668,7 +690,7 @@ f_tld()
f_list restore
f_list merge
f_list final
cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpdir } " /" ${ adb_dnsfile } " ) "
cnt = " $( wc -l 2>/dev/null < " ${ adb_tmpdir } / ${ adb_dnsfile } " ) "
fi
f_log "debug" " f_tld ::: source: ${ source } , cnt: ${ cnt :- "-" } , cnt_srt: ${ cnt_srt :- "-" } , cnt_tld: ${ cnt_tld :- "-" } , tld_ok: ${ tld_ok } "
}
@ -682,14 +704,12 @@ f_switch()
json_load_file " ${ adb_rtfile } " >/dev/null 2>& 1
json_select "data" >/dev/null 2>& 1
json_get_var status "adblock_status"
f_jsnup "running"
f_temp
if [ " ${ mode } " = "suspend" ] && [ " ${ status } " = "enabled" ]
then
> " ${ adb_dnsdir } / ${ adb_dnsfile } "
if [ -n " ${ adb_dnsheader } " ]
then
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } / ${ adb_dnsfile } "
fi
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } / ${ adb_dnsfile } "
f_count
done = "true"
elif [ " ${ mode } " = "resume" ] && [ " ${ status } " = "paused" ]
then
@ -697,7 +717,7 @@ f_switch()
f_list whitelist
f_list restore
f_list merge
f_tld " ${ adb_tmpdir } " /" ${ adb_dnsfile } "
f_tld " ${ adb_tmpdir } / ${ adb_dnsfile } "
f_list final
done = "true"
fi
@ -762,28 +782,28 @@ f_query()
then
while [ " ${ domain } " != " ${ tld } " ]
do
search = " ${ domain //./ \\ . } "
search = " ${ search //[+*~% \$ & \" \' ]/ } "
result = " $( awk -F '/|\"|\t| ' " /^( ${ prefix } + ${ search } .* ${ suffix } $)/{i++;{printf(\" + %s\\n\",\$ ${ field } )};if(i>9){printf(\" + %s\\n\",\"[...]\");exit}} " " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
search = " ${ domain //[+*~% \$ & \" \' ]/ } "
search = " ${ search //./ \\ . } "
result = " $( awk -F '/|\"|\t| ' " /^( ${ search } | ${ prefix } + ${ search } .* ${ suffix } $)/{i++;{printf(\" + %s\\n\",\$ ${ field } )};if(i>9){printf(\" + %s\\n\",\"[...]\");exit}} " " ${ adb_dnsdir } / ${ adb_dnsfile } " ) "
printf "%s\\n%s\\n%s\\n" ":::" " ::: results for domain ' ${ domain } ' in active blocklist " ":::"
printf "%s\n\n" " ${ result :- " - no match" } "
printf "%s\\ n\ \n" " ${ result :- " - no match" } "
domain = " ${ tld } "
tld = " ${ domain #*. } "
done
fi
if [ -d " ${ adb_backupdir } " ]
then
search = " ${ 1 //./ \\ . } "
search = " ${ search //[+*~% \$ & \" \' ]/ } "
search = " ${ 1 //[+*~% \$ & \" \' ]/ } "
search = " ${ search //./ \\ . } "
printf "%s\\n%s\\n%s\\n" ":::" " ::: results for domain ' ${ 1 } ' in backups and black-/whitelist " ":::"
for file in " ${ adb_backupdir } " /" ${ adb_dnsprefix } " .*.gz " ${ adb_blacklist } " " ${ adb_whitelist } "
for file in " ${ adb_backupdir } / ${ adb_dnsprefix } " .*.gz " ${ adb_blacklist } " " ${ adb_whitelist } "
do
suffix = " ${ file ##*. } "
if [ " ${ suffix } " = "gz" ]
then
zcat " ${ file } " 2>/dev/null | awk -v f = " ${ file ##*/ } " " /^( $search |.*\\. ${ search } )/{i++;{printf(\" + %-30s%s\\n\",f,\$1)};if(i>=3){printf(\" + %-30s%s\\n\",f,\"[...]\");exit}} "
else
cat " ${ file } " 2>/dev/null | awk -v f = " ${ file ##*/ } " " /^( $search |.*\\. ${ search } )/{i++;{printf(\" + %-30s%s\\n\",f,\$1)};if(i>=3){printf(\" + %-30s%s\\n\",f,\"[...]\");exit}} "
awk -v f = " ${ file ##*/ } " " /^( $search |.*\\. ${ search } )/{i++;{printf(\" + %-30s%s\\n\",f,\$1)};if(i>=3){printf(\" + %-30s%s\\n\",f,\"[...]\");exit}} " " ${ file } "
fi
done
fi
@ -796,24 +816,17 @@ f_jsnup()
{
local run_time bg_pid status = " ${ 1 :- "enabled" } "
if [ " ${ adb_rc } " -gt 0 ]
then
status = "error"
run_time = " $( /bin/date "+%d.%m.%Y %H:%M:%S" ) "
fi
if [ " ${ status } " = "enabled" ]
then
run_time = " $( /bin/date "+%d.%m.%Y %H:%M:%S" ) "
fi
if [ " ${ status } " = "suspend" ]
then
status = "paused"
fi
if [ " ${ status } " = "resume" ]
then
status = ""
fi
case " ${ status } " in
"enabled" | "error" )
run_time = " $( /bin/date "+%d.%m.%Y %H:%M:%S" ) "
; ;
"suspend" )
status = "paused"
; ;
"resume" )
status = ""
; ;
esac
json_load_file " ${ adb_rtfile } " >/dev/null 2>& 1
json_select "data" >/dev/null 2>& 1
if [ " ${ ? } " -eq 0 ]
@ -849,11 +862,11 @@ f_jsnup()
json_close_object
json_dump > " ${ adb_rtfile } "
if [ ${ adb_mail } -eq 1 ] && [ -x " ${ adb_mailservice } " ] && \
if [ " ${ adb_mail } " -eq 1 ] && [ -x " ${ adb_mailservice } " ] && \
{ [ " ${ status } " = "error" ] || { [ " ${ status } " = "enabled" ] && [ " ${ adb_cnt } " -le " ${ adb_mcnt } " ] ; } }
then
( " ${ adb_mailservice } " >/dev/null 2>& 1) &
bg_pid = ${ ! }
bg_pid = " ${ ! } "
fi
f_log "debug" " f_jsnup ::: status: ${ status :- "-" } , cnt: ${ adb_cnt } , mail: ${ adb_mail } , mail_service: ${ adb_mailservice } , mail_cnt: ${ adb_mcnt } , mail_pid: ${ bg_pid :- "-" } "
}
@ -864,13 +877,13 @@ f_log()
{
local class = " ${ 1 } " log_msg = " ${ 2 } "
if [ -n " ${ log_msg } " ] && { [ " ${ class } " != "debug" ] || [ ${ adb_debug } -eq 1 ] ; }
if [ -n " ${ log_msg } " ] && { [ " ${ class } " != "debug" ] || [ " ${ adb_debug } " -eq 1 ] ; }
then
logger -p " ${ class } " -t " adblock- ${ adb_ver } [ ${ $} ] " " ${ log_msg } "
if [ " ${ class } " = "err" ]
then
f_rmdns
f_jsnup
f_jsnup "error"
logger -p " ${ class } " -t " adblock- ${ adb_ver } [ ${ $} ] " "Please also check 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'"
exit 1
fi
@ -890,7 +903,7 @@ f_bgserv()
( " ${ adb_ubusservice } " & )
elif [ -n " ${ bg_pid } " ] && [ " ${ status } " = "stop" ]
then
kill -HUP ${ bg_pid } 2>/dev/null
kill -HUP " ${ bg_pid } " 2>/dev/null
fi
f_log "debug" " f_bgserv ::: status: ${ status :- "-" } , bg_pid: ${ bg_pid :- "-" } , dns_filereset: ${ adb_dnsfilereset :- "-" } , ubus_service: ${ adb_ubusservice :- "-" } "
}
@ -899,12 +912,10 @@ f_bgserv()
#
f_main( )
{
local tmp_ load tmp_ file src_name src_rset src_url src_log src_arc src_cat cat list entry suffix mem_total mem_free enabled cnt = 1
local src_ tmpload src_ tmpfile src_name src_rset src_url src_log src_arc src_cat src_item src_rc list entry suffix mem_total mem_free enabled cnt = 1
mem_total = " $( awk '/^MemTotal/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null) "
mem_free = " $( awk '/^MemFree/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null) "
tmp_load = " ${ adb_tmpload } "
tmp_file = " ${ adb_tmpfile } "
f_log "debug" " f_main ::: dns: ${ adb_dns } , fetch_util: ${ adb_fetchinfo } , force_dns: ${ adb_forcedns } , mem_total: ${ mem_total :- 0 } , mem_free: ${ mem_free :- 0 } , max_queue: ${ adb_maxqueue } "
# main loop
@ -917,8 +928,9 @@ f_main()
src_url = " $( eval printf "%s" \" \$ \{ adb_src_${ src_name } \} \" ) "
src_rset = " $( eval printf "%s" \" \$ \{ adb_src_rset_${ src_name } \} \" ) "
src_cat = " $( eval printf "%s" \" \$ \{ adb_src_cat_${ src_name } \} \" ) "
adb_tmpload = " ${ tmp_load } " ." ${ src_name } "
adb_tmpfile = " ${ tmp_file } " ." ${ src_name } "
src_tmpload = " ${ adb_tmpload } . ${ src_name } "
src_tmpfile = " ${ adb_tmpfile } . ${ src_name } "
src_rc = 4
# basic pre-checks
#
@ -934,7 +946,7 @@ f_main()
if [ " ${ adb_action } " = "start" ]
then
f_list restore
if [ " ${ adb_rc } " -eq 0 ] && [ -s " ${ adb _tmpfile} " ]
if [ " ${ ? } " -eq 0 ] && [ -s " ${ src _tmpfile} " ]
then
continue
fi
@ -945,21 +957,21 @@ f_main()
if [ -n " ${ src_cat } " ]
then
(
src_arc = " ${ adb_tmpdir } " /" ${ src_url ##*/ } "
src_arc = " ${ adb_tmpdir } / ${ src_url ##*/ } "
src_log = " $( " ${ adb_fetchutil } " ${ adb_fetchparm } " ${ src_arc } " " ${ src_url } " 2>& 1) "
adb_rc = ${ ? }
if [ " ${ adb _rc} " -eq 0 ] && [ -s " ${ src_arc } " ]
src_rc = " ${ ? } "
if [ " ${ src _rc} " -eq 0 ] && [ -s " ${ src_arc } " ]
then
list = " $( tar -tzf " ${ src_arc } " ) "
suffix = " $( eval printf "%s" \" \$ \{ adb_src_suffix_${ src_name } :-\" domains\" \} \" ) "
for cat in ${ src_cat }
for src_item in ${ src_cat }
do
entry = " $( printf "%s" " ${ list } " | grep -E " [\\^/]+ ${ cat } / ${ suffix } " ) "
entry = " $( printf "%s" " ${ list } " | grep -E " [\\^/]+ ${ src_item } / ${ suffix } " ) "
if [ -n " ${ entry } " ]
then
tar -xOzf " ${ src_arc } " " ${ entry } " >> " ${ adb _tmpload} "
adb_rc = ${ ? }
if [ " ${ adb _rc} " -ne 0 ]
tar -xOzf " ${ src_arc } " " ${ entry } " >> " ${ src _tmpload} "
src_rc = " ${ ? } "
if [ " ${ src _rc} " -ne 0 ]
then
break
fi
@ -967,47 +979,53 @@ f_main()
done
else
src_log = " $( printf "%s" " ${ src_log } " | awk '{ORS=" ";print $0}' ) "
f_log "debug" " f_main ::: name: ${ src_name } , url: ${ src_url } , rc: ${ adb _rc} , log: ${ src_log :- "-" } "
f_log "debug" " f_main ::: name: ${ src_name } , url: ${ src_url } , rc: ${ src _rc} , log: ${ src_log :- "-" } "
fi
if [ " ${ adb _rc} " -eq 0 ] && [ -s " ${ adb _tmpload} " ]
if [ " ${ src _rc} " -eq 0 ] && [ -s " ${ src _tmpload} " ]
then
rm -f " ${ src_arc } "
awk " ${ src_rset } " " ${ adb _tmpload} " 2>/dev/null > " ${ adb _tmpfile} "
adb_rc = ${ ? }
if [ " ${ adb _rc} " -eq 0 ] && [ -s " ${ adb _tmpfile} " ]
awk " ${ src_rset } " " ${ src _tmpload} " 2>/dev/null > " ${ src _tmpfile} "
src_rc = " ${ ? } "
if [ " ${ src _rc} " -eq 0 ] && [ -s " ${ src _tmpfile} " ]
then
rm -f " ${ adb _tmpload} "
rm -f " ${ src _tmpload} "
f_list download
f_list backup
else
elif [ " ${ adb_action } " != "start" ]
then
f_list restore
fi
else
elif [ " ${ adb_action } " != "start" ]
then
f_list restore
fi
) &
) &
else
(
src_log = " $( " ${ adb_fetchutil } " ${ adb_fetchparm } " ${ adb _tmpload} " " ${ src_url } " 2>& 1) "
adb_rc = ${ ? }
if [ ${ adb_rc } -eq 0 ] && [ -s " ${ adb _tmpload} " ]
src_log = " $( " ${ adb_fetchutil } " ${ adb_fetchparm } " ${ src _tmpload} " " ${ src_url } " 2>& 1) "
src_rc = " ${ ? } "
if [ " ${ src_rc } " -eq 0 ] && [ -s " ${ src _tmpload} " ]
then
awk " ${ src_rset } " " ${ adb _tmpload} " 2>/dev/null > " ${ adb _tmpfile} "
adb_rc = ${ ? }
if [ " ${ adb _rc} " -eq 0 ] && [ -s " ${ adb _tmpfile} " ]
awk " ${ src_rset } " " ${ src _tmpload} " 2>/dev/null > " ${ src _tmpfile} "
src_rc = " ${ ? } "
if [ " ${ src _rc} " -eq 0 ] && [ -s " ${ src _tmpfile} " ]
then
rm -f " ${ adb _tmpload} "
rm -f " ${ src _tmpload} "
f_list download
f_list backup
else
elif [ " ${ adb_action } " != "start" ]
then
f_list restore
fi
else
src_log = " $( printf "%s" " ${ src_log } " | awk '{ORS=" ";print $0}' ) "
f_log "debug" " f_main ::: name: ${ src_name } , url: ${ src_url } , rc: ${ adb_rc } , log: ${ src_log :- "-" } "
f_list restore
f_log "debug" " f_main ::: name: ${ src_name } , url: ${ src_url } , rc: ${ src_rc } , log: ${ src_log :- "-" } "
if [ " ${ adb_action } " != "start" ]
then
f_list restore
fi
fi
) &
) &
fi
hold = $(( cnt%adb_maxqueue))
if [ " ${ hold } " -eq 0 ]
@ -1021,26 +1039,25 @@ f_main()
#
wait
src_name = "overall"
adb_tmpfile = " ${ tmp_file } "
f_list merge
# tld compression and dns restart
#
if [ -s " ${ adb_tmpdir } " / " ${ adb_dnsfile } " ]
if [ " ${ ? } " -eq 0 ] && [ -s " ${ adb_tmpdir } / ${ adb_dnsfile } " ]
then
f_tld " ${ adb_tmpdir } " /" ${ adb_dnsfile } "
f_tld " ${ adb_tmpdir } / ${ adb_dnsfile } "
f_list final
else
> " ${ adb_dnsdir } " /" ${ adb_dnsfile } "
> " ${ adb_dnsdir } / ${ adb_dnsfile } "
fi
chown " ${ adb_dnsuser } " " ${ adb_dnsdir } " /" ${ adb_dnsfile } " 2>/dev/null
chown " ${ adb_dnsuser } " " ${ adb_dnsdir } / ${ adb_dnsfile } " 2>/dev/null
f_dnsup
f_jsnup
if [ " ${ ? } " -eq 0 ]
then
f_jsnup "enabled"
if [ " ${ adb_dnsfilereset } " = "true" ]
then
> " ${ adb_dnsdir } " /" ${ adb_dnsfile } "
printf "%s\\n" " ${ adb_dnsheader } " > " ${ adb_dnsdir } / ${ adb_dnsfile } "
f_log "info" " blocklist with overall ${ adb_cnt } domains loaded successfully and reset afterwards ( ${ adb_sysver } ) "
f_bgserv "start"
else
@ -1050,7 +1067,6 @@ f_main()
f_log "err" "dns backend restart with active blocklist failed"
fi
f_rmtemp
exit ${ adb_rc }
}
# trace dns queries via tcpdump and prepare a report
@ -1074,8 +1090,8 @@ f_report()
then
if [ -n " ${ bg_pid } " ]
then
kill -HUP ${ bg_pid } 2>/dev/null
while $( kill -0 ${ bg_pid } 2>/dev/null)
kill -HUP " ${ bg_pid } " 2>/dev/null
while $( kill -0 " ${ bg_pid } " 2>/dev/null)
do
sleep 1
done
@ -1097,18 +1113,18 @@ f_report()
ports = " ${ ports } or port ${ port } "
fi
done
( " ${ adb_reputil } " -nn -s0 -l -i ${ adb_repiface } ${ ports } -C${ adb_repchunksize } -W${ adb_repchunkcnt } -w " ${ adb_repdir } " /adb_report.pcap >/dev/null 2>& 1 & )
( " ${ adb_reputil } " -nn -s0 -l -i ${ adb_repiface } ${ ports } -C${ adb_repchunksize } -W${ adb_repchunkcnt } -w " ${ adb_repdir } /adb_report.pcap " >/dev/null 2>& 1 & )
bg_pid = " $( pgrep -f " ^ ${ adb_reputil } .*adb_report\\.pcap $" | awk '{ORS=" "; print $1}' ) "
fi
if [ " ${ adb_action } " = "report" ] && [ " ${ filter } " = "false" ]
then
> " ${ adb_repdir } " /adb_report.raw
for file in " ${ adb_repdir } " /adb_report.pcap*
> " ${ adb_repdir } /adb_report.raw "
for file in " ${ adb_repdir } /adb_report.pcap " *
do
(
" ${ adb_reputil } " -tttt -r " ${ file } " 2>/dev/null | \
awk -v cnt = ${ cnt } ' !/\. lan\. /&& / A[ \? ] +| NXDomain| 0\. 0\. 0\. 0/{ a = $1 ; b = substr( $2 ,0,8) ; c = $4 ; sub( /\. [ 0-9] +$/,"" ,c) ; \
awk -v cnt = " ${ cnt } " ' !/\. lan\. /&& / A[ \? ] +| NXDomain| 0\. 0\. 0\. 0/{ a = $1 ; b = substr( $2 ,0,8) ; c = $4 ; sub( /\. [ 0-9] +$/,"" ,c) ; \
d = cnt $7 ; sub( /\* $/,"" ,d) ; e = $( NF-1) ; sub( /[ 0-9] \/ [ 0-9] \/ [ 0-9] | 0\. 0\. 0\. 0/,"NX" ,e) ; sub( /\. $/,"" ,e) ; sub( /( [ 0-9] { 1,3} \. ) { 3} [ 0-9] { 1,3} /,"OK" ,e) ; printf( "%s\t%s\t%s\t%s\t%s\n" , a,b,c,d,e) } ' >> " ${ adb_repdir } /adb_report.raw "
) &
hold = $(( cnt%adb_maxqueue))
@ -1120,30 +1136,30 @@ f_report()
done
wait
if [ -s " ${ adb_repdir } " /adb_report.raw ]
if [ -s " ${ adb_repdir } /adb_report.raw " ]
then
awk '{printf("%s\t%s\t%s\t%s\t%s\t%s\n", $4,$5,$1,$2,$3,$4)}' " ${ adb_repdir } /adb_report.raw " | \
sort -ur | uniq -uf2 | awk ' { currA = ( $6 +0) ; currB = $6 ; currC = substr( $6 ,length( $6 ) ,1) ; \
if ( reqA = = currB) { reqA = 0; printf( "%s\t%s\n" ,d,$2 ) } else if ( currC = = "+" ) { reqA = currA; d = $3 "\t" $4 "\t" $5 "\t" $2 } } ' | sort -ur > " ${ adb_repdir } /adb_report "
fi
if [ -s " ${ adb_repdir } " /adb_report ]
if [ -s " ${ adb_repdir } /adb_report " ]
then
total = " $( wc -l < " ${ adb_repdir } " /adb_report ) "
blocked = " $( awk '{if($5=="NX")print $4}' " ${ adb_repdir } " /adb_report | wc -l) "
total = " $( wc -l < " ${ adb_repdir } /adb_report ") "
blocked = " $( awk '{if($5=="NX")print $4}' " ${ adb_repdir } /adb_report " | wc -l) "
percent = " $( awk -v t = " ${ total } " -v b = " ${ blocked } " 'BEGIN{printf("%.2f %s\n",b/t*100, "%")}' ) "
rep_clients = " $( awk '{print $3}' " ${ adb_repdir } " /adb_report | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10) printf("%s_%s ",$1,$2)}' ) "
rep_domains = " $( awk '{if($5!="NX")print $4}' " ${ adb_repdir } " /adb_report | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10)printf("%s_%s ",$1,$2)}' ) "
rep_blocked = " $( awk '{if($5=="NX")print $4}' " ${ adb_repdir } " /adb_report | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10)printf("%s_%s ",$1,$2)}' ) "
rep_clients = " $( awk '{print $3}' " ${ adb_repdir } /adb_report " | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10) printf("%s_%s ",$1,$2)}' ) "
rep_domains = " $( awk '{if($5!="NX")print $4}' " ${ adb_repdir } /adb_report " | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10)printf("%s_%s ",$1,$2)}' ) "
rep_blocked = " $( awk '{if($5=="NX")print $4}' " ${ adb_repdir } /adb_report " | sort | uniq -c | sort -r | awk '{ORS=" ";if(NR<=10)printf("%s_%s ",$1,$2)}' ) "
> " ${ adb_repdir } " /adb_report.json
json_load_file " ${ adb_repdir } " /adb_report.json >/dev/null 2>& 1
> " ${ adb_repdir } /adb_report.json "
json_load_file " ${ adb_repdir } /adb_report.json " >/dev/null 2>& 1
json_init
json_add_object "data"
json_add_string "start_date" " $( awk 'END{printf("%s",$1)}' " ${ adb_repdir } " /adb_report ) "
json_add_string "start_time" " $( awk 'END{printf("%s",$2)}' " ${ adb_repdir } " /adb_report ) "
json_add_string "end_date" " $( awk 'NR==1{printf("%s",$1)}' " ${ adb_repdir } " /adb_report ) "
json_add_string "end_time" " $( awk 'NR==1{printf("%s",$2)}' " ${ adb_repdir } " /adb_report ) "
json_add_string "start_date" " $( awk 'END{printf("%s",$1)}' " ${ adb_repdir } /adb_report ") "
json_add_string "start_time" " $( awk 'END{printf("%s",$2)}' " ${ adb_repdir } /adb_report ") "
json_add_string "end_date" " $( awk 'NR==1{printf("%s",$1)}' " ${ adb_repdir } /adb_report ") "
json_add_string "end_time" " $( awk 'NR==1{printf("%s",$2)}' " ${ adb_repdir } /adb_report ") "
json_add_string "total" " ${ total } "
json_add_string "blocked" " ${ blocked } "
json_add_string "percent" " ${ percent } "
@ -1175,29 +1191,29 @@ f_report()
json_close_object
done
json_close_object
json_dump > " ${ adb_repdir } " /adb_report.json
json_dump > " ${ adb_repdir } /adb_report.json "
fi
rm -f " ${ adb_repdir } " /adb_report.raw
rm -f " ${ adb_repdir } /adb_report.raw "
fi
if [ -s " ${ adb_repdir } " /adb_report ]
if [ -s " ${ adb_repdir } /adb_report " ]
then
search = " ${ search //./ \\ . } "
search = " ${ search //[+*~% \$ & \" \' ]/ } "
> " ${ adb_repdir } " /adb_report.final
awk " BEGIN{i=0}/( ${ search } )/{i++;if(i<= ${ count } ){printf \"%s\\t%s\\t%s\\t%s\\t%s\\n\",\$1,\$2,\$3,\$4,\$5}} " " ${ adb_repdir } " /adb_report > " ${ adb_repdir } " /adb_report.final
if [ ! -s " ${ adb_repdir } " /adb_report.final ]
> " ${ adb_repdir } /adb_report.final "
awk " BEGIN{i=0}/( ${ search } )/{i++;if(i<= ${ count } ){printf \"%s\\t%s\\t%s\\t%s\\t%s\\n\",\$1,\$2,\$3,\$4,\$5}} " " ${ adb_repdir } /adb_report " > " ${ adb_repdir } /adb_report.final "
if [ ! -s " ${ adb_repdir } /adb_report.final " ]
then
printf "%s\\t%s\\t%s\\t%s\\t%s\\n" "-" "-" "-" "-" "-" > " ${ adb_repdir } " /adb_report.final
printf "%s\\t%s\\t%s\\t%s\\t%s\\n" "-" "-" "-" "-" "-" > " ${ adb_repdir } /adb_report.final "
fi
fi
if [ " ${ print } " = "true" ]
then
if [ -s " ${ adb_repdir } " /adb_report.json ]
if [ -s " ${ adb_repdir } /adb_report.json " ]
then
printf "%s\\n%s\\n%s\\n" ":::" "::: Adblock DNS-Query Report" ":::"
json_load_file " ${ adb_repdir } " /adb_report.json
json_load_file " ${ adb_repdir } /adb_report.json "
json_select "data"
json_get_keys keylist
for key in ${ keylist }
@ -1246,11 +1262,11 @@ f_report()
index = $(( index+1))
done
fi
if [ -s " ${ adb_repdir } " /adb_report.final ]
if [ -s " ${ adb_repdir } /adb_report.final " ]
then
printf "%s\\n%s\\n%s\\n" ":::" "::: Latest DNS Queries" ":::"
printf "%-15s%-15s%-45s%-50s%s\\n" "Date" "Time" "Client" "Domain" "Answer"
awk '{printf "%-15s%-15s%-45s%-50s%s\n",$1,$2,$3,$4,$5}' " ${ adb_repdir } " /adb_report.final
awk '{printf "%-15s%-15s%-45s%-50s%s\n",$1,$2,$3,$4,$5}' " ${ adb_repdir } /adb_report.final "
fi
else
printf "%s\\n%s\\n%s\\n" ":::" "::: no reporting data available yet" ":::"
@ -1274,31 +1290,31 @@ fi
#
f_load
case " ${ adb_action } " in
stop)
" stop" )
f_bgserv "stop"
f_report "+" "50" "false" "false"
f_rmdns
; ;
restart)
" restart" )
f_bgserv "stop"
f_report "+" "50" "false" "false"
f_rmdns
f_env
f_main
; ;
suspend )
"suspend" )
f_switch suspend
; ;
resume)
" resume" )
f_switch resume
; ;
report)
" report" )
f_report " ${ 2 } " " ${ 3 } " " ${ 4 } " " ${ 5 } "
; ;
query)
" query" )
f_query " ${ 2 } "
; ;
start| reload)
" start" | " reload" )
f_bgserv "stop"
f_report "+" "50" "false" "false"
f_env