adblock: update to 4.2.2-6
authorDirk Brenken <dev@brenken.org>
Thu, 10 Oct 2024 17:00:14 +0000 (19:00 +0200)
committerDirk Brenken <dev@brenken.org>
Thu, 10 Oct 2024 17:06:27 +0000 (19:06 +0200)
* fixed adblock status reporting
* optimized the mail template
* removed unanswered DNS requests from reporting
* various small fixes

Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit 1294b54471e4bd17d1b3de9fc777ffa0ae9e429d)

net/adblock/Makefile
net/adblock/files/adblock.init
net/adblock/files/adblock.mail
net/adblock/files/adblock.sh

index ea3d74d382f75dbfc592c0b872e8355eb560abd4..1218c8b12fb8aadc00359b384c01bcab714fe3b6 100644 (file)
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=adblock
 PKG_VERSION:=4.2.2
-PKG_RELEASE:=5
+PKG_RELEASE:=6
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
 
index f1acb456f23f051558c6d8b7b7ec1ce3c114d0bd..d3253e57a62b69ce4256ae3605d78f1e9db39a7e 100755 (executable)
@@ -133,36 +133,21 @@ status() {
 }
 
 status_service() {
-       local key keylist value idxval values type rtfile
+       local key keylist value values rtfile
 
        rtfile="$(uci_get adblock global adb_rtfile "/tmp/adb_runtime.json")"
-
+       json_init
        json_load_file "${rtfile}" >/dev/null 2>&1
        json_get_keys keylist
        if [ -n "${keylist}" ]; then
                printf "%s\n" "::: adblock runtime information"
                for key in ${keylist}; do
                        json_get_var value "${key}" >/dev/null 2>&1
-                       if [ "${key%_*}" = "active" ]; then
-                               printf "  + %-15s : " "${key}"
-                               json_select "${key}" >/dev/null 2>&1
-                               values=""
-                               index="1"
-                               while json_get_type type "${index}" && [ "${type}" = "object" ]; do
-                                       json_get_values idxval "${index}" >/dev/null 2>&1
-                                       if [ "${index}" = "1" ]; then
-                                               values="${idxval}"
-                                       else
-                                               values="${values}, ${idxval}"
-                                       fi
-                                       index="$((index + 1))"
-                               done
-                               values="$(printf "%s" "${values}" | awk '{NR=1;max=98;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max)}else{printf"%-22s%s\n","",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
-                               printf "%s\n" "${values:-"-"}"
-                               json_select ".."
-                       else
-                               printf "  + %-15s : %s\n" "${key}" "${value:-"-"}"
+                       if [ "${key}" = "active_sources" ]; then
+                               json_get_values values "${key}" >/dev/null 2>&1
+                               value="${values// /, }"
                        fi
+                       printf "  + %-15s : %s\n" "${key}" "${value:-"-"}"
                done
        else
                printf "%s\n" "::: no adblock runtime information available"
index 67fc011aa5c55e4ceaadfea4b474e74c67739f82..f5f74d57b682900dcd6619fe27a849b3d415cb01 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # send mail script for adblock notifications
-# Copyright (c) 2015-2022 Dirk Brenken (dev@brenken.org)
+# Copyright (c) 2015-2024 Dirk Brenken (dev@brenken.org)
 # This is free software, licensed under the GNU General Public License v3.
 
 # Please note: you have to manually install and configure the package 'msmtp' before using this script
@@ -12,46 +12,26 @@ LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
 
 [ -r "/lib/functions.sh" ] && . "/lib/functions.sh"
+[ -r "/usr/bin/adblock.sh" ] && . "/usr/bin/adblock.sh" "mail"
 
 adb_debug="$(uci_get adblock global adb_debug "0")"
 adb_mailsender="$(uci_get adblock global adb_mailsender "no-reply@adblock")"
 adb_mailreceiver="$(uci_get adblock global adb_mailreceiver)"
 adb_mailtopic="$(uci_get adblock global adb_mailtopic "adblock notification")"
 adb_mailprofile="$(uci_get adblock global adb_mailprofile "adb_notify")"
-adb_ver="${1}"
-adb_mail="$(command -v msmtp)"
-adb_logger="$(command -v logger)"
-adb_logread="$(command -v logread)"
-adb_rc="1"
 
-f_log() {
-       local class="${1}" log_msg="${2}"
-
-       if [ -x "${adb_logger}" ]; then
-               "${adb_logger}" -p "${class}" -t "adblock-${adb_ver}[${$}]" "${log_msg}"
-       else
-               printf "%s %s %s\n" "${class}" "adblock-${adb_ver}[${$}]" "${log_msg}"
-       fi
-}
-
-if [ -z "${adb_mailreceiver}" ]; then
-       f_log "err" "please set the mail receiver with the 'adb_mailreceiver' option"
-       exit ${adb_rc}
-fi
+[ -z "${adb_mailreceiver}" ] && f_log "err" "please set the mail receiver with the 'adb_mailreceiver' option"
 [ "${adb_debug}" = "1" ] && debug="--debug"
 
 adb_mailhead="From: ${adb_mailsender}\nTo: ${adb_mailreceiver}\nSubject: ${adb_mailtopic}\nReply-to: ${adb_mailsender}\nMime-Version: 1.0\nContent-Type: text/html;charset=utf-8\nContent-Disposition: inline\n\n"
 
 # info preparation
 #
-sys_info="$(
-       strings /etc/banner 2>/dev/null
-       ubus call system board | sed -e 's/\"release\": {//' | sed -e 's/^[ \t]*//' | sed -e 's/[{}\",]//g' | sed -e 's/[ ]/  \t/' | sed '/^$/d' 2>/dev/null
-)"
+sys_info="$("${adb_stringscmd}" /etc/banner 2>/dev/null; "${adb_ubuscmd}" call system board | "${adb_awkcmd}" 'BEGIN{FS="[{}\"]"}{if($2=="kernel"||$2=="hostname"||$2=="system"||$2=="model"||$2=="description")printf "  + %-12s: %s\n",$2,$4}' 2>/dev/null)"
 adb_info="$(/etc/init.d/adblock status 2>/dev/null)"
-rep_info="${2}"
-if [ -x "${adb_logread}" ]; then
-       log_info="$("${adb_logread}" -l 100 -e "adblock-" | awk '{NR=1;max=120;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max)}else{print substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
+rep_info="${1}"
+if [ -x "${adb_logreadcmd}" ]; then
+       log_info="$("${adb_logreadcmd}" -l 100 -e "adblock-" | "${adb_awkcmd}" '{NR=1;max=120;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max)}else{print substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
 fi
 
 # mail body
@@ -67,11 +47,9 @@ adb_mailtext="${adb_mailtext}</pre></body></html>"
 
 # send mail
 #
-if [ -x "${adb_mail}" ]; then
-       printf "%b" "${adb_mailhead}${adb_mailtext}" 2>/dev/null | "${adb_mail}" ${debug} -a "${adb_mailprofile}" "${adb_mailreceiver}" >/dev/null 2>&1
-       adb_rc=${?}
-       f_log "info" "mail sent to '${adb_mailreceiver}' with rc '${adb_rc}'"
+if [ -x "${adb_mailcmd}" ]; then
+       printf "%b" "${adb_mailhead}${adb_mailtext}" 2>/dev/null | "${adb_mailcmd}" ${debug} -a "${adb_mailprofile}" "${adb_mailreceiver}" >/dev/null 2>&1
+       f_log "info" "mail sent to '${adb_mailreceiver}' with rc '${?}'"
 else
        f_log "err" "msmtp mail daemon not found"
 fi
-exit ${adb_rc}
index 9b15ad8b67b376de10d4ab4761696311af4e96b5..b8688116a1754d3bd1559899a37b782b3de434fc 100755 (executable)
@@ -11,7 +11,7 @@
 export LC_ALL=C
 export PATH="/usr/sbin:/usr/bin:/sbin:/bin"
 
-adb_ver="4.2.2-r5"
+adb_ver="4.2.2-r6"
 adb_enabled="0"
 adb_debug="0"
 adb_forcedns="0"
@@ -255,7 +255,7 @@ f_dns() {
        if [ -z "${adb_dns}" ]; then
                utils="knot-resolver bind unbound dnsmasq raw"
                for util in ${utils}; do
-                       if [ "${util}" = "raw" ] || printf "%s" "${adb_packages}" | grep -q "^${util}"; then
+                       if [ "${util}" = "raw" ] || printf "%s" "${adb_packages}" | "${adb_grepcmd}" -q "^${util}"; then
                                if [ "${util}" = "knot-resolver" ]; then
                                        util="kresd"
                                elif [ "${util}" = "bind" ]; then
@@ -401,8 +401,8 @@ f_fetch() {
        if [ -z "${adb_fetchutil}" ]; then
                utils="aria2c curl wget uclient-fetch"
                for util in ${utils}; do
-                       if { [ "${util}" = "uclient-fetch" ] && printf "%s" "${adb_packages}" | grep -q "^libustream-"; } ||
-                               { [ "${util}" = "wget" ] && printf "%s" "${adb_packages}" | grep -q "^wget -"; } ||
+                       if { [ "${util}" = "uclient-fetch" ] && printf "%s" "${adb_packages}" | "${adb_grepcmd}" -q "^libustream-"; } ||
+                               { [ "${util}" = "wget" ] && printf "%s" "${adb_packages}" | "${adb_grepcmd}" -q "^wget -"; } ||
                                [ "${util}" = "curl" ] || [ "${util}" = "aria2c" ]; then
                                if [ -x "$(command -v "${util}")" ]; then
                                        adb_fetchutil="${util}"
@@ -542,7 +542,7 @@ f_count() {
                                                adb_cnt="$((adb_cnt - $(wc -l 2>/dev/null <"${file}")))"
                                        fi
                                done
-                               [ -n "${adb_dnsheader}" ] && adb_cnt="$(((adb_cnt - $(printf "%b" "${adb_dnsheader}" | grep -c "^")) / 2))"
+                               [ -n "${adb_dnsheader}" ] && adb_cnt="$(((adb_cnt - $(printf "%b" "${adb_dnsheader}" | "${adb_grepcmd}" -c "^")) / 2))"
                        fi
                        ;;
        esac
@@ -556,14 +556,14 @@ f_extconf() {
        case "${adb_dns}" in
                "dnsmasq")
                        config="dhcp"
-                       config_dir="$(uci_get dhcp "@dnsmasq[${adb_dnsinstance}]" confdir | grep -Fo "${adb_dnsdir}")"
+                       config_dir="$(uci_get dhcp "@dnsmasq[${adb_dnsinstance}]" confdir | "${adb_grepcmd}" -Fo "${adb_dnsdir}")"
                        if [ "${adb_enabled}" = "1" ] && [ -z "${config_dir}" ]; then
                                uci_set dhcp "@dnsmasq[${adb_dnsinstance}]" confdir "${adb_dnsdir}" 2>/dev/null
                        fi
                        ;;
                "kresd")
                        config="resolver"
-                       config_file="$(uci_get resolver kresd rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")"
+                       config_file="$(uci_get resolver kresd rpz_file | "${adb_grepcmd}" -Fo "${adb_dnsdir}/${adb_dnsfile}")"
                        if [ "${adb_enabled}" = "1" ] && [ -z "${config_file}" ]; then
                                uci -q add_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
                        elif [ "${adb_enabled}" = "0" ] && [ -n "${config_file}" ]; then
@@ -579,7 +579,7 @@ f_extconf() {
                /etc/init.d/firewall enabled; then
                for zone in ${adb_zonelist}; do
                        for port in ${adb_portlist}; do
-                               if ! printf "%s" "${fwcfg}" | grep -q "adblock_${zone}${port}[ |\$]"; then
+                               if ! printf "%s" "${fwcfg}" | "${adb_grepcmd}" -q "adblock_${zone}${port}[ |\$]"; then
                                        uci -q batch <<-EOC
                                                set firewall."adblock_${zone}${port}"="redirect"
                                                set firewall."adblock_${zone}${port}".name="Adblock DNS (${zone}, ${port})"
@@ -1026,7 +1026,7 @@ f_query() {
 # update runtime information
 #
 f_jsnup() {
-       local entry sources runtime utils bg_pid status="${1:-"enabled"}"
+       local object sources runtime utils bg_pid status="${1:-"enabled"}"
 
        adb_memory="$("${adb_awkcmd}" '/^MemTotal|^MemFree|^MemAvailable/{ORS="/"; print int($2/1000)}' "/proc/meminfo" 2>/dev/null |
                "${adb_awkcmd}" '{print substr($0,1,length($0)-1)}')"
@@ -1064,15 +1064,12 @@ f_jsnup() {
        : >"${adb_rtfile}"
        json_init
        json_load_file "${adb_rtfile}" >/dev/null 2>&1
-       json_init
        json_add_string "adblock_status" "${status:-"enabled"}"
        json_add_string "adblock_version" "${adb_ver}"
        json_add_string "blocked_domains" "${adb_cnt:-0}"
        json_add_array "active_sources"
-       for entry in ${sources}; do
-               json_add_object
-               json_add_string "source" "${entry}"
-               json_close_object
+       for object in ${sources:-"-"}; do
+               json_add_string "${object}" "${object}"
        done
        json_close_array
        json_add_string "dns_backend" "${adb_dns:-"-"} (${adb_dnscachecmd##*/}), ${adb_dnsdir:-"-"}"
@@ -1085,9 +1082,8 @@ f_jsnup() {
        json_dump >"${adb_rtfile}"
 
        if [ "${adb_mail}" = "1" ] && [ -x "${adb_mailservice}" ] &&
-               { [ "${status}" = "error" ] || { [ "${status}" = "enabled" ] && [ "${adb_cnt}" -le "${adb_mailcnt}" ]; }; }; then
-               ("${adb_mailservice}" "${adb_ver}" >/dev/null 2>&1) &
-               bg_pid="${!}"
+               [ "${status}" = "enabled" ] && [ "${adb_cnt}" -le "${adb_mailcnt}" ]; then
+               "${adb_mailservice}" >/dev/null 2>&1
        fi
        f_log "debug" "f_jsnup  ::: status: ${status:-"-"}, cnt: ${adb_cnt}, mail: ${adb_mail}, mail_service: ${adb_mailservice}, mail_cnt: ${adb_mailcnt}, mail_pid: ${bg_pid:-"-"}"
 }
@@ -1101,7 +1097,7 @@ f_log() {
                [ -x "${adb_loggercmd}" ] && "${adb_loggercmd}" -p "${class}" -t "adblock-${adb_ver}[${$}]" "${log_msg}" || \
                        printf "%s %s %s\n" "${class}" "adblock-${adb_ver}[${$}]" "${log_msg}"
                if [ "${class}" = "err" ] || [ "${class}" = "emerg" ]; then
-                       f_rmdns
+                       [ "${adb_action}" != "mail" ] && f_rmdns
                        f_jsnup "error"
                        exit 1
                fi
@@ -1199,7 +1195,7 @@ f_main() {
                                                src_suffix="$(eval printf "%s" \"\$\{adb_src_suffix_${src_name}:-\"domains\"\}\")"
                                                src_list="$(tar -tzf "${src_arc}" 2>/dev/null)"
                                                for src_item in ${src_cat}; do
-                                                       src_entries="${src_entries} $(printf "%s" "${src_list}" | grep -E "${src_item}/${src_suffix}$")"
+                                                       src_entries="${src_entries} $(printf "%s" "${src_list}" | "${adb_grepcmd}" -E "${src_item}/${src_suffix}$")"
                                                done
                                                if [ -n "${src_entries}" ]; then
                                                        tar -xOzf "${src_arc}" ${src_entries} 2>/dev/null >"${src_tmpload}"
@@ -1330,8 +1326,8 @@ f_report() {
                                                        {domain=substr($(NF-1),1,length($(NF-1))-1);type="RQ"}
                                                else
                                                        {if($(NF-2)~/NXDomain/||$(NF-1)=="0.0.0.0"){type="NX"}else{type="OK"};domain=""};
-                                               if(int($9)>0)
-                                                       printf "%08d\t%s\t%s\t%s\t%-25s\t%s\n",$9,type,$1,substr($2,1,8),$6,domain}' >>"${report_raw}"
+                                                       if(int($9)>0)
+                                                               printf "%08d\t%s\t%s\t%s\t%-25s\t%s\n",$9,type,$1,substr($2,1,8),$6,domain}' >>"${report_raw}"
                                else
                                        "${adb_dumpcmd}" "${resolve}" --immediate-mode -T domain -tttt -r "${file}" 2>/dev/null |
                                        "${adb_awkcmd}" -v cnt="${cnt}" '!/\.lan\. |PTR\? | SOA\? | Flags /&&/ A[A]*\? |NXDomain|0\.0\.0\.0|[0-9]\/[0-9]\/[0-9]/{sub(/\.[0-9]+$/,"",$4);
@@ -1340,8 +1336,8 @@ f_report() {
                                                        {domain=substr($(NF-1),1,length($(NF-1))-1);type="RQ"}
                                                else
                                                        {if($(NF-2)~/NXDomain/||$(NF-1)=="0.0.0.0"){type="NX"}else{type="OK"};domain=""};
-                                               if(int($7)>0)
-                                                       printf "%08d\t%s\t%s\t%s\t%-25s\t%s\n",$7,type,$1,substr($2,1,8),$4,domain}' >>"${report_raw}"
+                                                       if(int($7)>0)
+                                                               printf "%08d\t%s\t%s\t%s\t%-25s\t%s\n",$7,type,$1,substr($2,1,8),$4,domain}' >>"${report_raw}"
                                fi
                        ) &
                        hold="$((cnt % adb_cores))"
@@ -1352,7 +1348,7 @@ f_report() {
                if [ -s "${report_raw}" ]; then
                        "${adb_sortcmd}" ${adb_srtopts} -k3,3 -k4,4 -k1,1 -k2,2 -u -r "${report_raw}" |
                                "${adb_awkcmd}" '{currA=($1+0);currB=$1;currC=$2;if(reqA==currB){reqA=0;printf "%-90s\t%s\n",d,$2}else if(currC=="RQ"){reqA=currA;d=$3"\t"$4"\t"$5"\t"$6}}' |
-                               "${adb_sortcmd}" ${adb_srtopts} -u -r >"${report_srt}"
+                               "${adb_grepcmd}" -v "RQ" | "${adb_sortcmd}" ${adb_srtopts} -u -r >"${report_srt}"
                        : >"${report_raw}"
                fi
 
@@ -1462,8 +1458,7 @@ f_report() {
        elif [ "${action}" = "json" ]; then
                cat "${report_jsn}"
        elif [ "${action}" = "mail" ] && [ "${adb_mail}" = "1" ] && [ -x "${adb_mailservice}" ]; then
-               ("${adb_mailservice}" "${adb_ver}" "${content}" >/dev/null 2>&1) &
-               bg_pid="${!}"
+               "${adb_mailservice}" "${content}" >/dev/null 2>&1
        fi
        f_log "debug" "f_report ::: action: ${action}, top_count: ${top_count}, res_count: ${res_count}, search: ${search}, dump_util: ${adb_dumpcmd}, rep_dir: ${adb_reportdir}, rep_iface: ${adb_repiface:-"-"}, rep_listen: ${adb_replisten}, rep_chunksize: ${adb_repchunksize}, rep_chunkcnt: ${adb_repchunkcnt}, rep_resolve: ${adb_represolve}"
 }
@@ -1490,6 +1485,9 @@ adb_ubuscmd="$(f_cmd ubus)"
 adb_loggercmd="$(f_cmd logger)"
 adb_dumpcmd="$(f_cmd tcpdump optional)"
 adb_lookupcmd="$(f_cmd nslookup)"
+adb_mailcmd="$(f_cmd msmtp optional)"
+adb_stringscmd="$(f_cmd strings optional)"
+adb_logreadcmd="$(f_cmd logread optional)"
 
 # handle different adblock actions
 #