Browse Source

adblock: update to 1.1.1

* discard uncommitted uci changes in case of processing errors
* init script (stop action) now removes all 'adb_src_count' &
'adb_src_timestamp' entries in config
* updated documentation

Signed-off-by: Dirk Brenken <openwrt@brenken.org>
lilik-openwrt-22.03
Dirk Brenken 8 years ago
committed by Dirk Brenken
parent
commit
262f4551e2
5 changed files with 62 additions and 34 deletions
  1. +1
    -1
      net/adblock/Makefile
  2. +24
    -12
      net/adblock/files/README.md
  3. +13
    -8
      net/adblock/files/adblock-helper.sh
  4. +9
    -9
      net/adblock/files/adblock-update.sh
  5. +15
    -4
      net/adblock/files/adblock.init

+ 1
- 1
net/adblock/Makefile View File

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=adblock
PKG_VERSION:=1.1.0
PKG_VERSION:=1.1.1
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <openwrt@brenken.org>


+ 24
- 12
net/adblock/files/README.md View File

@ -147,21 +147,33 @@ This rule removes _all_ domains from the blocklists with this string in it, i.e.
photos.daily-deals.analoganalytics.com
adblockanalytics.com
**example to add [rolist+easylist](https://easylist-downloads.adblockplus.org/rolist+easylist.txt) as a new source:**
**example to add a new blocklist sources:**
<pre><code>
add a new source section in adblock config, take an existing easylist source as a template and change only the source name, the url and the description
config source 'ruadlist'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt'
option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
option adb_src_desc 'focus on russian ad related domains plus generic easylist additions, weekly updates, approx. 2.000 entries'
1. the easy way ...
example: https://easylist-downloads.adblockplus.org/rolist+easylist.txt
adblock already supports an easylist source, called 'ruadlist'. To add the additional local easylist
as a new source, copy the existing config source 'ruadlist' section and change only
the source name, the url and the description - that's all!
config source 'rolist'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/rolist+easylist.txt'
option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
option adb_src_desc 'focus on romanian ad related domains plus generic easylist additions, weekly updates, approx. 600 entries'
option enabled '0'
option adb_src 'https://easylist-downloads.adblockplus.org/rolist+easylist.txt'
option adb_src_rset '{FS=\"[|^]\"} \$0 ~/^\|\|([A-Za-z0-9_-]+\.){1,}[A-Za-z]+\^$/{print tolower(\$3)}'
option adb_src_desc 'focus on romanian ad related domains plus generic easylist additions, weekly updates, approx. 600 entries'
2. a bit harder ...
to add a really new source with different domain/host format you have to write a suitable
awk one-liner on your own, so basic awk skills are needed. As a starting point check the already
existing awk strings (adb_src_rset) in adblock config, maybe you need only small changes for your individual list.
Download the desired list and test your new awk string locally with:
cat new.list | awk 'fs__individual search__search core__result'
'fs' => field separator (optional)
'individual search' => individual search part to filter out needless list information
'search core' => always '([A-Za-z0-9_-]+\.){1,}[A-Za-z]+', this is part of all list sources and should be unchanged
'result' => always '{print tolower(\$n)}', only the output column 'n' may vary
the output result should be a sequential list with one domain/host per line - nothing more.
If your awk one-liner works quite well, add a new source section in adblock config and test your new source
</code></pre>
## Background


+ 13
- 8
net/adblock/files/adblock-helper.sh View File

@ -110,7 +110,7 @@ f_envload()
if [ -z "${adb_enabled}" ] || [ -z "${adb_cfgversion}" ] || [ "${adb_cfgversion}" != "${adb_scriptver%.*}" ]
then
rc=125
f_log "no valid adblock configuration found, please merge latest changes from '/etc/config/adblock.opkg' manually" "${rc}"
f_log "outdated adblock configuration found, please use latest version from '/etc/adblock/adblock.conf.default'" "${rc}"
f_exit
fi
if [ $((adb_enabled)) -ne 1 ]
@ -128,6 +128,7 @@ f_envload()
adb_dnsdir="/tmp/dnsmasq.d"
adb_dnsprefix="adb_list"
adb_fetch="/usr/bin/wget"
adb_uci="/sbin/uci"
unset adb_srclist adb_revsrclist adb_errsrclist
# get lan ip addresses
@ -476,10 +477,10 @@ f_cntconfig()
then
count=$((count / 2))
fi
uci_set "adblock" "${src_name}" "adb_src_count" "${count}"
${adb_uci} -q set "adblock.${src_name}.adb_src_count=${count}"
count_sum=$((count_sum + count))
done
uci_set "adblock" "global" "adb_overall_count" "${count_sum}"
${adb_uci} -q set "adblock.global.adb_overall_count=${count_sum}"
}
# f_rmconfig: remove counters & timestamps in given config sections
@ -493,10 +494,10 @@ f_rmconfig()
src_name="${list/*./}"
if [ -n "${restore_done}" ]
then
uci_set "adblock" "${src_name}" "adb_src_timestamp" "list restored"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=list restored"
else
uci_remove "adblock" "${src_name}" "adb_src_count"
uci_remove "adblock" "${src_name}" "adb_src_timestamp"
${adb_uci} -q delete "adblock.${src_name}.adb_src_count"
${adb_uci} -q delete "adblock.${src_name}.adb_src_timestamp"
fi
done
unset restore_done
@ -598,14 +599,18 @@ f_exit()
ipv6_adblock="$(${iptv6} -t nat -vnL | awk '$10 ~ /^adb-nat$/ {sum += $1} END {printf sum}')"
ipv6_adblock="$((${ipv6_adblock} + $(${iptv6} -vnL | awk '$10 ~ /^adb-(fwd|out)$/ {sum += $1} END {printf sum}')))"
fi
if [ -n "$(uci changes adblock)" ]
if [ -n "$(${adb_uci} -q changes adblock)" ]
then
uci_commit "adblock"
${adb_uci} -q commit "adblock"
fi
f_log "firewall statistics (IPv4/IPv6): ${ipv4_adblock}/${ipv6_adblock} ad related packets blocked"
f_log "domain adblock processing finished successfully (${adb_scriptver}, ${openwrt_version}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))"
elif [ $((rc)) -gt 0 ]
then
if [ -n "$(${adb_uci} -q changes adblock)" ]
then
${adb_uci} -q revert "adblock"
fi
f_log "domain adblock processing failed (${adb_scriptver}, ${openwrt_version}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))"
else
rc=0


+ 9
- 9
net/adblock/files/adblock-update.sh View File

@ -36,7 +36,7 @@ fi
# get current directory, script- and openwrt version
#
adb_scriptdir="${0%/*}"
adb_scriptver="1.1.0"
adb_scriptver="1.1.1"
openwrt_version="$(cat /etc/openwrt_version)"
# source in adblock function library
@ -75,14 +75,14 @@ do
eval "url=\"\${adb_src_${src_name}}\""
eval "src_rset=\"\${adb_src_rset_${src_name}}\""
adb_dnsfile="${adb_dnsdir}/${adb_dnsprefix}.${src_name}"
list_time="$(uci_get "adblock" "${src_name}" "adb_src_timestamp")"
list_time="$(${adb_uci} -q get "adblock.${src_name}.adb_src_timestamp")"
f_log "=> processing adblock source '${src_name}'"
# check 'url' and 'src_rset' values
#
if [ -z "${url}" ] || [ -z "${src_rset}" ]
then
uci_set "adblock" "${src_name}" "adb_src_timestamp" "broken config"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=broken config"
f_log " broken source configuration, check 'adb_src' and 'adb_src_rset' in config"
continue
fi
@ -162,7 +162,7 @@ do
unset tmp_domains
elif [ $((rc)) -eq 0 ] && [ -z "${tmp_domains}" ]
then
uci_set "adblock" "${src_name}" "adb_src_timestamp" "empty download"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=empty download"
f_log " empty source download finished"
continue
else
@ -173,7 +173,7 @@ do
else
adb_errsrclist="${adb_errsrclist} -o -name ${adb_dnsprefix}.${src_name}"
fi
uci_set "adblock" "${src_name}" "adb_src_timestamp" "download failed"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=download failed"
f_log " source download failed"
continue
fi
@ -205,14 +205,14 @@ do
#
if [ $((rc)) -eq 0 ]
then
uci_set "adblock" "${src_name}" "adb_src_timestamp" "${url_time}"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=${url_time}"
f_log " domain merging finished"
else
f_log " domain merging failed" "${rc}"
f_restore
fi
else
uci_set "adblock" "${src_name}" "adb_src_timestamp" "empty domain input"
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=empty domain input"
f_log " empty domain input received"
continue
fi
@ -239,7 +239,7 @@ fi
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
f_rmconfig "${rm_done}"
f_log "disabled adblock lists removed"
f_log "remove disabled adblock lists"
elif [ $((rc)) -ne 0 ] && [ -n "${rm_done}" ]
then
f_log "error during removal of disabled adblock lists" "${rc}"
@ -295,7 +295,7 @@ fi
# restart & check dnsmasq with newly generated set of adblock lists
#
f_cntconfig
adb_count="$(uci_get "adblock" "global" "adb_overall_count")"
adb_count="$(${adb_uci} -q get "adblock.global.adb_overall_count")"
if [ -n "${adb_revsrclist}" ] || [ -n "${rm_done}" ] || [ -n "${restore_done}" ]
then
/etc/init.d/dnsmasq restart


+ 15
- 4
net/adblock/files/adblock.init View File

@ -8,6 +8,7 @@ adb_pid="${$}"
adb_script="/usr/bin/adblock-update.sh"
adb_pidfile="/var/run/adblock.pid"
adb_logger="/usr/bin/logger"
adb_uci="/sbin/uci"
if [ -t 1 ]
then
@ -24,6 +25,15 @@ then
exit 255
fi
remove_config()
{
local value opt section="${1}" options="adb_src_timestamp adb_src_count"
for opt in ${options}
do
${adb_uci} -q delete "adblock.${section}.${opt}"
done
}
boot()
{
return 0
@ -53,10 +63,11 @@ stop()
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
. "/usr/bin/adblock-helper.sh"
uci_remove "adblock" "global" "adb_overall_count"
f_rmconfig "${rm_done}"
uci_commit "adblock"
. "/lib/functions.sh"
config_load adblock
config_foreach remove_config source
${adb_uci} -q delete "adblock.global.adb_overall_count"
${adb_uci} -q commit "adblock"
/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart
fi


Loading…
Cancel
Save