mirror of
https://github.com/openwrt/packages.git
synced 2026-05-31 06:51:51 +08:00
adblock: update 4.5.5-6
- f_search: refactored backup and local block-/allowlist scan to run in parallel - f_search: raise the search timeout in backups to max. 90 seconds - f_load: skip f_fetch for search action, no remote download is needed for local lookups - f_dns: skip destructive paths (file wipe, f_dnsup) for search and report actions - LuCI: adapt search backend changes in the frontend - LuCI: minor frontend fixes & improvements Signed-off-by: Dirk Brenken <dev@brenken.org>
This commit is contained in:
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=adblock
|
PKG_NAME:=adblock
|
||||||
PKG_VERSION:=4.5.5
|
PKG_VERSION:=4.5.5
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=6
|
||||||
PKG_LICENSE:=GPL-3.0-or-later
|
PKG_LICENSE:=GPL-3.0-or-later
|
||||||
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
|
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
|
||||||
|
|
||||||
|
|||||||
@@ -135,10 +135,16 @@ f_load() {
|
|||||||
|
|
||||||
# load dns backend and fetch utility
|
# load dns backend and fetch utility
|
||||||
#
|
#
|
||||||
if [ "${adb_action}" != "report" ] && [ "${adb_action}" != "mail" ]; then
|
case "${adb_action}" in
|
||||||
|
"report" | "mail") ;;
|
||||||
|
"search")
|
||||||
|
f_dns
|
||||||
|
;;
|
||||||
|
*)
|
||||||
f_dns
|
f_dns
|
||||||
f_fetch
|
f_fetch
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# check if reporting is enabled and tcpdump is available
|
# check if reporting is enabled and tcpdump is available
|
||||||
#
|
#
|
||||||
@@ -497,7 +503,7 @@ f_dns() {
|
|||||||
|
|
||||||
# determine final dns file directory based on dns shifting
|
# determine final dns file directory based on dns shifting
|
||||||
#
|
#
|
||||||
if [ "${adb_dnsshift}" = "0" ]; then
|
if [ "${adb_dnsshift}" = "0" ] || [ -z "${adb_backupdir}" ]; then
|
||||||
adb_finaldir="${adb_dnsdir}"
|
adb_finaldir="${adb_dnsdir}"
|
||||||
[ -L "${adb_dnsdir}/${adb_dnsfile}" ] && "${adb_rmcmd}" -f "${adb_dnsdir}/${adb_dnsfile}"
|
[ -L "${adb_dnsdir}/${adb_dnsfile}" ] && "${adb_rmcmd}" -f "${adb_dnsdir}/${adb_dnsfile}"
|
||||||
else
|
else
|
||||||
@@ -510,11 +516,13 @@ f_dns() {
|
|||||||
for dir in "${adb_dnsdir:-"/tmp"}" "${adb_backupdir:-"/tmp"}"; do
|
for dir in "${adb_dnsdir:-"/tmp"}" "${adb_backupdir:-"/tmp"}"; do
|
||||||
[ ! -d "${dir}" ] && mkdir -p "${dir}"
|
[ ! -d "${dir}" ] && mkdir -p "${dir}"
|
||||||
done
|
done
|
||||||
if [ "${adb_dnsflush}" = "1" ] || [ "${free_mem:-"0"}" -lt "64" ]; then
|
if [ "${adb_action}" != "search" ] && [ "${adb_action}" != "report" ]; then
|
||||||
printf '%b' "${adb_dnsheader}" >"${adb_finaldir}/${adb_dnsfile}"
|
if [ "${adb_dnsflush}" = "1" ] || [ "${free_mem:-"0"}" -lt "64" ]; then
|
||||||
f_dnsup
|
printf '%b' "${adb_dnsheader}" >"${adb_finaldir}/${adb_dnsfile}"
|
||||||
elif [ ! -f "${adb_finaldir}/${adb_dnsfile}" ]; then
|
f_dnsup
|
||||||
printf '%b' "${adb_dnsheader}" >"${adb_finaldir}/${adb_dnsfile}"
|
elif [ ! -f "${adb_finaldir}/${adb_dnsfile}" ]; then
|
||||||
|
printf '%b' "${adb_dnsheader}" >"${adb_finaldir}/${adb_dnsfile}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1456,12 +1464,13 @@ f_switch() {
|
|||||||
# search blocklist for certain (sub-)domains
|
# search blocklist for certain (sub-)domains
|
||||||
#
|
#
|
||||||
f_search() {
|
f_search() {
|
||||||
local rc search res result tmp_result prefix suffix field search_start search_end search_timeout=30 domain="${1}" tld="${1#*.}"
|
local rc cnt res search result result_tmp result_flag result_tc backup_tmp prefix suffix field search_start search_end search_timeout="90" domain="${1}" tld="${1#*.}"
|
||||||
|
|
||||||
# prepare result file
|
# prepare result files
|
||||||
#
|
#
|
||||||
tmp_result="${adb_rundir}/adblock.search.tmp"
|
|
||||||
result="${adb_rundir}/adblock.search"
|
result="${adb_rundir}/adblock.search"
|
||||||
|
result_tmp="${adb_rundir}/adblock.search.tmp"
|
||||||
|
result_flag="${adb_rundir}/adblock.search.flag"
|
||||||
|
|
||||||
# input validation
|
# input validation
|
||||||
#
|
#
|
||||||
@@ -1520,58 +1529,78 @@ f_search() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# initialize tmp_result and start search
|
# initialize result_tmp and start search
|
||||||
#
|
#
|
||||||
: >"${tmp_result}"
|
: >"${result_tmp}"
|
||||||
read -r search_start _ <"/proc/uptime"
|
read -r search_start _ <"/proc/uptime"
|
||||||
search_start="${search_start%.*}"
|
search_start="${search_start%.*}"
|
||||||
|
|
||||||
# search recursively for domain and its parent domains until tld is reached
|
# search recursively for max. 3 domain and its parent domains until tld is reached
|
||||||
#
|
#
|
||||||
while :; do
|
while :; do
|
||||||
search="${domain//./\\.}"
|
search="${domain//./\\.}"
|
||||||
res="$("${adb_awkcmd}" -F '/|\"|\t| ' "/^(${prefix}${search}${suffix})$/{i++;if(i<=9){printf \" + %s\n\",\$${field}}else if(i==10){printf \" + %s\n\",\"[...]\";exit}}" "${adb_finaldir}/${adb_dnsfile}")"
|
res="$("${adb_awkcmd}" -F '/|\"|\t| ' "/^(${prefix}${search}${suffix})$/{i++;if(i<=3){printf \" + %s\n\",\$${field}}else if(i==4){printf \" + %s\n\",\"[...]\";exit}}" "${adb_finaldir}/${adb_dnsfile}")"
|
||||||
printf '%s\n%s\n%s\n' ":::" "::: domain '${domain}' in active blocklist" ":::" >>"${tmp_result}"
|
printf '%s\n%s\n%s\n' ":::" "::: domain '${domain}' in active blocklist" ":::" >>"${result_tmp}"
|
||||||
printf '%s\n\n' "${res:-" - no match"}" >>"${tmp_result}"
|
printf '%s\n\n' "${res:-" - no match"}" >>"${result_tmp}"
|
||||||
[ "${domain}" = "${tld}" ] && break
|
[ "${domain}" = "${tld}" ] && break
|
||||||
domain="${tld}"
|
domain="${tld}"
|
||||||
tld="${domain#*.}"
|
tld="${domain#*.}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# search exactly for domain in backup files and local block-/allowlist
|
# search exactly for the given domain in backup files and local block-/allowlist
|
||||||
#
|
#
|
||||||
if [ -d "${adb_backupdir}" ]; then
|
if [ -d "${adb_backupdir}" ]; then
|
||||||
search="${1//./\\.}"
|
search="${1//./\\.}"
|
||||||
printf '%s\n%s\n%s\n' ":::" "::: domain '${1}' in backups and in local block-/allowlist" ":::" >>"${tmp_result}"
|
printf '%s\n%s\n%s\n' ":::" "::: domain '${1}' in backups and in local block-/allowlist" ":::" >>"${result_tmp}"
|
||||||
|
"${adb_rmcmd}" -f "${result_flag}" "${adb_rundir}"/adblock.search.frag.*
|
||||||
|
result_tc=""
|
||||||
|
cnt="1"
|
||||||
for file in "${adb_backupdir}/adb_list".*.gz "${adb_blocklist}" "${adb_allowlist}"; do
|
for file in "${adb_backupdir}/adb_list".*.gz "${adb_blocklist}" "${adb_allowlist}"; do
|
||||||
suffix="${file##*.}"
|
read -r search_end _ </proc/uptime
|
||||||
if [ "${suffix}" = "gz" ]; then
|
if [ "$((${search_end%.*} - search_start))" -gt "${search_timeout}" ]; then
|
||||||
if [ "${adb_tld}" = "1" ]; then
|
result_tc="1"
|
||||||
"${adb_zcatcmd}" "${file}" 2>>"${adb_errorlog}" |
|
break
|
||||||
"${adb_awkcmd}" 'BEGIN{FS="."}{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' |
|
fi
|
||||||
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" >>"${tmp_result}"
|
|
||||||
|
# parallel search in backup files and local block-/allowlist,
|
||||||
|
# exit as soon as a match is found or after 3 matches per file, if more matches are found print truncated result and stop searching further files
|
||||||
|
(
|
||||||
|
backup_tmp="${adb_rundir}/adblock.search.frag.$$.${cnt}"
|
||||||
|
suffix="${file##*.}"
|
||||||
|
if [ "${suffix}" = "gz" ]; then
|
||||||
|
if [ "${adb_tld}" = "1" ]; then
|
||||||
|
"${adb_zcatcmd}" "${file}" 2>>"${adb_errorlog}" |
|
||||||
|
"${adb_awkcmd}" 'BEGIN{FS="."}{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' |
|
||||||
|
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})\$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" >"${backup_tmp}"
|
||||||
|
else
|
||||||
|
"${adb_zcatcmd}" "${file}" 2>>"${adb_errorlog}" |
|
||||||
|
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})\$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" >"${backup_tmp}"
|
||||||
|
fi
|
||||||
|
rc="${?}"
|
||||||
else
|
else
|
||||||
"${adb_zcatcmd}" "${file}" 2>>"${adb_errorlog}" |
|
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})\$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" "${file}" >"${backup_tmp}"
|
||||||
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" >>"${tmp_result}"
|
rc="${?}"
|
||||||
fi
|
fi
|
||||||
rc="${?}"
|
if [ "${rc}" = "0" ]; then
|
||||||
else
|
: >"${result_flag}"
|
||||||
"${adb_awkcmd}" -v f="${file##*/}" "BEGIN{rc=1};/^($search|.*\\.${search})$/{i++;if(i<=3){printf \" + %-30s%s\n\",f,\$1;rc=0}else if(i==4){printf \" + %-30s%s\n\",f,\"[...]\"}};END{exit rc}" "${file}" >>"${tmp_result}"
|
"${adb_catcmd}" "${backup_tmp}" >>"${result_tmp}"
|
||||||
rc="${?}"
|
|
||||||
fi
|
|
||||||
if [ "${rc}" = "0" ]; then
|
|
||||||
res="true"
|
|
||||||
read -r search_end _ <"/proc/uptime"
|
|
||||||
search_end="${search_end%.*}"
|
|
||||||
if [ "$((search_end - search_start))" -gt "${search_timeout}" ]; then
|
|
||||||
printf '%s\n\n' " - [...]" >>"${tmp_result}"
|
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
fi
|
"${adb_rmcmd}" -f "${backup_tmp}"
|
||||||
|
) &
|
||||||
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
|
cnt="$((cnt + 1))"
|
||||||
done
|
done
|
||||||
[ "${res}" != "true" ] && printf '%s\n\n' " - no match" >>"${tmp_result}"
|
wait
|
||||||
|
|
||||||
|
# if result_tc is set, it means that the search was stopped due to timeout and the result is truncated
|
||||||
|
#
|
||||||
|
if [ -n "${result_tc}" ]; then
|
||||||
|
printf '%s\n\n' " - [...]" >>"${result_tmp}"
|
||||||
|
elif [ ! -f "${result_flag}" ]; then
|
||||||
|
printf '%s\n\n' " - no match" >>"${result_tmp}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
"${adb_mvcmd}" -f "${tmp_result}" "${result}"
|
"${adb_mvcmd}" -f "${result_tmp}" "${result}"
|
||||||
"${adb_catcmd}" "${result}" 2>>"${adb_errorlog}"
|
"${adb_catcmd}" "${result}" 2>>"${adb_errorlog}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1789,7 +1818,7 @@ f_main() {
|
|||||||
(
|
(
|
||||||
f_list safesearch "${entry}"
|
f_list safesearch "${entry}"
|
||||||
) &
|
) &
|
||||||
[ "${cnt}" -gt "${adb_cores}" ] && wait -n
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
cnt="$((cnt + 1))"
|
cnt="$((cnt + 1))"
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
@@ -2004,7 +2033,7 @@ f_main() {
|
|||||||
f_list prepare
|
f_list prepare
|
||||||
) &
|
) &
|
||||||
fi
|
fi
|
||||||
[ "${cnt}" -gt "${adb_cores}" ] && wait -n
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
cnt="$((cnt + 1))"
|
cnt="$((cnt + 1))"
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
@@ -2122,7 +2151,7 @@ f_report() {
|
|||||||
}
|
}
|
||||||
' >"${report_raw}.${cnt}"
|
' >"${report_raw}.${cnt}"
|
||||||
) &
|
) &
|
||||||
[ "${cnt}" -gt "${adb_cores}" ] && wait -n
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
cnt="$((cnt + 1))"
|
cnt="$((cnt + 1))"
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
@@ -2296,7 +2325,7 @@ f_report() {
|
|||||||
"${adb_fetchcmd}" ${adb_geoparm} "${adb_geourl}/${ip}" 2>>"${adb_errorlog}" |
|
"${adb_fetchcmd}" ${adb_geoparm} "${adb_geourl}/${ip}" 2>>"${adb_errorlog}" |
|
||||||
"${adb_awkcmd}" -v feed="homeIP" '{printf ",{\"%s\": %s}\n",feed,$0}' >"${map_jsn}.${cnt}"
|
"${adb_awkcmd}" -v feed="homeIP" '{printf ",{\"%s\": %s}\n",feed,$0}' >"${map_jsn}.${cnt}"
|
||||||
) &
|
) &
|
||||||
[ "${cnt}" -gt "${adb_cores}" ] && wait -n
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
cnt="$((cnt + 1))"
|
cnt="$((cnt + 1))"
|
||||||
done
|
done
|
||||||
wait
|
wait
|
||||||
@@ -2320,7 +2349,7 @@ f_report() {
|
|||||||
"${adb_fetchcmd}" ${adb_geoparm} "${adb_geourl}/${domain}" 2>>"${adb_errorlog}" |
|
"${adb_fetchcmd}" ${adb_geoparm} "${adb_geourl}/${domain}" 2>>"${adb_errorlog}" |
|
||||||
"${adb_awkcmd}" -v feed="${domain}" '{printf ",{\"%s\": %s}\n",feed,$0}' >"${map_jsn}.${cnt}"
|
"${adb_awkcmd}" -v feed="${domain}" '{printf ",{\"%s\": %s}\n",feed,$0}' >"${map_jsn}.${cnt}"
|
||||||
) &
|
) &
|
||||||
[ "${cnt}" -gt "${adb_cores}" ] && wait -n
|
[ "${cnt}" -ge "${adb_cores}" ] && wait -n
|
||||||
cnt="$((cnt + 1))"
|
cnt="$((cnt + 1))"
|
||||||
[ "${cnt}" -ge "45" ] && break
|
[ "${cnt}" -ge "45" ] && break
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user