mirror of https://github.com/openwrt/packages.git
adblock-fast: update to 1.1.2-10
* bump compat version to accommodate new strings * improve the output() function (thanks @bigsmile74) * implement support for user-configurable per-instance dnsmasq confdirs for dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset options Signed-off-by: Stan Grishin <stangri@melmac.ca>pull/25242/head
parent
6057b2702e
commit
0cb1b9d12e
|
@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=adblock-fast
|
||||
PKG_VERSION:=1.1.2
|
||||
PKG_RELEASE:=8
|
||||
PKG_RELEASE:=10
|
||||
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
|
||||
PKG_LICENSE:=AGPL-3.0-or-later
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ fi
|
|||
|
||||
readonly packageName='adblock-fast'
|
||||
readonly PKG_VERSION='dev-test'
|
||||
readonly packageCompat='2'
|
||||
readonly packageCompat='3'
|
||||
readonly serviceName="$packageName $PKG_VERSION"
|
||||
readonly packageConfigFile="/etc/config/${packageName}"
|
||||
readonly dnsmasqAddnhostsFile="/var/run/${packageName}/dnsmasq.addnhosts"
|
||||
|
@ -33,17 +33,17 @@ readonly dnsmasqAddnhostsGzip="${packageName}.dnsmasq.addnhosts.gz"
|
|||
readonly dnsmasqAddnhostsFilter='s|^|127.0.0.1 |;s|$||'
|
||||
readonly dnsmasqAddnhostsFilterIPv6='s|^|:: |;s|$||'
|
||||
readonly dnsmasqAddnhostsOutputFilter='s|^127.0.0.1 ||;s|^:: ||;'
|
||||
readonly dnsmasqConfFile="/tmp/dnsmasq.d/${packageName}"
|
||||
readonly dnsmasqConfFile="${packageName}"
|
||||
readonly dnsmasqConfCache="/var/run/${packageName}/dnsmasq.conf.cache"
|
||||
readonly dnsmasqConfGzip="${packageName}.dnsmasq.conf.gz"
|
||||
readonly dnsmasqConfFilter='s|^|local=/|;s|$|/|'
|
||||
readonly dnsmasqConfOutputFilter='s|local=/||;s|/$||;'
|
||||
readonly dnsmasqIpsetFile="/tmp/dnsmasq.d/${packageName}.ipset"
|
||||
readonly dnsmasqIpsetFile="${packageName}.ipset"
|
||||
readonly dnsmasqIpsetCache="/var/run/${packageName}/dnsmasq.ipset.cache"
|
||||
readonly dnsmasqIpsetGzip="${packageName}.dnsmasq.ipset.gz"
|
||||
readonly dnsmasqIpsetFilter='s|^|ipset=/|;s|$|/adb|'
|
||||
readonly dnsmasqIpsetOutputFilter='s|ipset=/||;s|/adb$||;'
|
||||
readonly dnsmasqNftsetFile="/tmp/dnsmasq.d/${packageName}.nftset"
|
||||
readonly dnsmasqNftsetFile="${packageName}.nftset"
|
||||
readonly dnsmasqNftsetCache="/var/run/${packageName}/dnsmasq.nftset.cache"
|
||||
readonly dnsmasqNftsetGzip="${packageName}.dnsmasq.nftset.gz"
|
||||
readonly dnsmasqNftsetFilter='s|^|nftset=/|;s|$|/4#inet#fw4#adb4|'
|
||||
|
@ -115,6 +115,7 @@ outputBlockedCountFilter=
|
|||
outputFilter=
|
||||
outputFilterIPv6=
|
||||
outputFile=
|
||||
outputDnsmasqFileList=
|
||||
outputGzip=
|
||||
outputCache=
|
||||
outputOutputFilter=
|
||||
|
@ -317,6 +318,7 @@ dns_set_output_values() {
|
|||
outputOutputFilter="$unboundOutputFilter"
|
||||
;;
|
||||
esac
|
||||
resolver 'on_load'
|
||||
}
|
||||
dnsmasq_hup() { killall -q -s HUP dnsmasq; }
|
||||
dnsmasq_kill() { killall -q -s KILL dnsmasq; }
|
||||
|
@ -377,11 +379,13 @@ sanitize_dir() { [ -d "$(readlink -fn "$1")" ] && readlink -fn "$1"; }
|
|||
smartdns_restart() { /etc/init.d/smartdns restart >/dev/null 2>&1; }
|
||||
str_contains() { test "$1" != "$(str_replace "$1" "$2" '')"; }
|
||||
str_contains_word() { echo "$1" | grep -q -w "$2"; }
|
||||
str_first_word() { echo "${1%% *}"; }
|
||||
# shellcheck disable=SC2018,SC2019
|
||||
str_to_lower() { echo "$1" | tr 'A-Z' 'a-z'; }
|
||||
# shellcheck disable=SC2018,SC2019
|
||||
str_to_upper() { echo "$1" | tr 'a-z' 'A-Z'; }
|
||||
str_replace() { printf "%b" "$1" | sed -e "s/$(printf "%b" "$2")/$(printf "%b" "$3")/g"; }
|
||||
# shellcheck disable=SC3060
|
||||
str_replace() { echo "${1//$2/$3}"; }
|
||||
ubus_get_data() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.${1}"; }
|
||||
ubus_get_ports() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.firewall.*.dest_port"; }
|
||||
uci_get_protocol() { uci_get 'network' "$1" 'proto'; }
|
||||
|
@ -459,29 +463,18 @@ get_url_filesize() {
|
|||
echo -en "$size"
|
||||
}
|
||||
|
||||
output() {
|
||||
# Target verbosity level with the first parameter being an integer
|
||||
is_integer() { case "$1" in ''|*[!0-9]*) return 1;; esac; }
|
||||
local msg memmsg logmsg text
|
||||
local sharedMemoryOutput="/dev/shm/$packageName-output"
|
||||
if [ -z "$verbosity" ] && [ -n "$packageName" ]; then
|
||||
verbosity="$(uci_get "$packageName" 'config' 'verbosity' '2')"
|
||||
fi
|
||||
if [ $# -ne 1 ] && is_integer "$1"; then
|
||||
if [ $((verbosity & $1)) -gt 0 ] || [ "$verbosity" = "$1" ]; then shift; text="$*"; else return 0; fi
|
||||
fi
|
||||
text="${text:-$*}";
|
||||
[ -t 1 ] && printf "%b" "$text"
|
||||
# shellcheck disable=SC3060
|
||||
msg="${text//$serviceName /service }";
|
||||
if [ "$(printf "%b" "$msg" | wc -l)" -gt 0 ]; then
|
||||
[ -s "$sharedMemoryOutput" ] && memmsg="$(cat "$sharedMemoryOutput")"
|
||||
logmsg="$(printf "%b" "${memmsg}${msg}" | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
logger -t "${packageName:-service} [$$]" "$(printf "%b" "$logmsg")"
|
||||
rm -f "$sharedMemoryOutput"
|
||||
else
|
||||
printf "%b" "$msg" >> "$sharedMemoryOutput"
|
||||
fi
|
||||
output() {
|
||||
local v="${verbosity:-1}"
|
||||
[ "$#" -ne '1' ] && {
|
||||
case "$1" in [0-9]) [ $((v & $1)) -gt 0 ] && shift || return 0;; esac }
|
||||
local msg="$*" queue="/dev/shm/$packageName-output"
|
||||
[ -t 1 ] && printf "%b" "$msg"
|
||||
[ "$msg" != "${msg//\\n}" ] && {
|
||||
[ -s "$queue" ] && msg="$(cat "$queue")${msg}" && rm -f "$queue"
|
||||
msg="$(printf "%b" "$msg" | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
logger -t "$packageName [$$]" "$(printf "%b" "$msg")"
|
||||
} || printf "%b" "$msg" >> "$queue"
|
||||
}
|
||||
|
||||
uci_add_list_if_new() {
|
||||
|
@ -520,14 +513,15 @@ get_text() {
|
|||
errorNoNft) r="dnsmasq nft sets support is enabled in $packageName, but nft is not installed";;
|
||||
errorNoWanGateway) r="The ${serviceName} failed to discover WAN gateway";;
|
||||
errorOutputDirCreate) r="failed to create directory for %s file";;
|
||||
errorOutputFileCreate) r="failed to create $outputFile file";;
|
||||
errorOutputFileCreate) r="failed to create %s file";;
|
||||
errorFailDNSReload) r="failed to restart/reload DNS resolver";;
|
||||
errorSharedMemory) r="failed to access shared memory";;
|
||||
errorSorting) r="failed to sort data file";;
|
||||
errorOptimization) r="failed to optimize data file";;
|
||||
errorAllowListProcessing) r="failed to process allow-list";;
|
||||
errorDataFileFormatting) r="failed to format data file";;
|
||||
errorMovingDataFile) r="failed to move data file '${A_TMP}' to '${outputFile}'";;
|
||||
errorCopyingDataFile) r="failed to copy data file to '%s'";;
|
||||
errorMovingDataFile) r="failed to move data file to '%s'";;
|
||||
errorCreatingCompressedCache) r="failed to create compressed cache";;
|
||||
errorRemovingTempFiles) r="failed to remove temporary files";;
|
||||
errorRestoreCompressedCache) r="failed to unpack compressed cache";;
|
||||
|
@ -544,6 +538,10 @@ get_text() {
|
|||
errorDetectingFileType) r="failed to detect format";;
|
||||
errorNothingToDo) r="no blocked list URLs nor blocked-domains enabled";;
|
||||
errorTooLittleRam) r="free ram (%s) is not enough to process all enabled block-lists";;
|
||||
errorCreatingBackupFile) r="failed to create backup file %s";;
|
||||
errorDeletingDataFile) r="failed to delete data file %s";;
|
||||
errorRestoringBackupFile) r="failed to restore backup file %s";;
|
||||
errorNoOutputFile) r="failed to create final block-list %s";;
|
||||
|
||||
statusNoInstall) r="$serviceName is not installed or not found";;
|
||||
statusStopped) r="Stopped";;
|
||||
|
@ -560,6 +558,7 @@ get_text() {
|
|||
warningMissingRecommendedPackages) r="some recommended packages are missing";;
|
||||
warningInvalidCompressedCacheDir) r="invalid compressed cache directory '%s'";;
|
||||
warningFreeRamCheckFail) r="can't detect free RAM";;
|
||||
*) r="Unknown text '$1'";;
|
||||
esac
|
||||
shift
|
||||
# shellcheck disable=SC2059
|
||||
|
@ -846,7 +845,7 @@ load_environment() {
|
|||
|
||||
resolver() {
|
||||
_dnsmasq_instance_config() {
|
||||
local cfg="$1" param="$2"
|
||||
local cfg="$1" param="$2" confdir confdirFile
|
||||
[ -s "/etc/config/dhcp" ] || return 0
|
||||
case "$param" in
|
||||
dnsmasq.addnhosts)
|
||||
|
@ -855,7 +854,13 @@ resolver() {
|
|||
fi
|
||||
uci_add_list_if_new 'dhcp' "$cfg" 'addnhosts' "$dnsmasqAddnhostsFile"
|
||||
;;
|
||||
cleanup|dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset|unbound.adb_list)
|
||||
cleanup|unbound.adb_list)
|
||||
uci_remove_list 'dhcp' "$cfg" 'addnhosts' "$dnsmasqAddnhostsFile"
|
||||
if [ "$(uci_get 'dhcp' "$cfg" 'serversfile')" = "$dnsmasqServersFile" ]; then
|
||||
uci_remove 'dhcp' "$cfg" 'serversfile'
|
||||
fi
|
||||
;;
|
||||
dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset)
|
||||
uci_remove_list 'dhcp' "$cfg" 'addnhosts' "$dnsmasqAddnhostsFile"
|
||||
if [ "$(uci_get 'dhcp' "$cfg" 'serversfile')" = "$dnsmasqServersFile" ]; then
|
||||
uci_remove 'dhcp' "$cfg" 'serversfile'
|
||||
|
@ -869,6 +874,20 @@ resolver() {
|
|||
;;
|
||||
esac
|
||||
}
|
||||
# shellcheck disable=SC2317
|
||||
_dnsmasq_instance_init() {
|
||||
local cfg="$1" param="$2" confdir confdirFile
|
||||
[ -s "/etc/config/dhcp" ] || return 0
|
||||
case "$param" in
|
||||
dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset)
|
||||
config_get confdir "$cfg" 'confdir' '/tmp/dnsmasq.d'
|
||||
confdirFile="${confdir}/${outputFile}"
|
||||
if ! str_contains "$dnsmasqFileList" "$confdirFile"; then
|
||||
dnsmasqFileList="${dnsmasqFileList:+$dnsmasqFileList }${confdirFile}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
_smartdns_instance_config() {
|
||||
[ -s "/etc/config/smartdns" ] || return 0
|
||||
local cfg="$1" param="$2"
|
||||
|
@ -920,14 +939,29 @@ resolver() {
|
|||
[ -n "$(uci_changes 'smartdns')" ] && uci_commit 'smartdns'
|
||||
fi
|
||||
;;
|
||||
on_load)
|
||||
case "$dns" in
|
||||
dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset)
|
||||
[ -z "$dnsmasqFileList" ] || return 0
|
||||
config_load 'dhcp'
|
||||
if [ "$dnsmasq_instance" = "*" ]; then
|
||||
config_foreach _dnsmasq_instance_init 'dnsmasq' "$dns"
|
||||
elif [ -n "$dnsmasq_instance" ]; then
|
||||
for i in $dnsmasq_instance; do
|
||||
_dnsmasq_instance_init "@dnsmasq[$i]" "$dns" || _dnsmasq_instance_init "$i" "$dns"
|
||||
done
|
||||
fi
|
||||
outputFile="$(str_first_word "$dnsmasqFileList")"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
on_start)
|
||||
if [ ! -s "$outputFile" ]; then
|
||||
json set status 'statusFail'
|
||||
json add error 'errorOutputFileCreate'
|
||||
output "${_ERROR_}: $(get_text 'errorOutputFileCreate')!\n"
|
||||
json add error 'errorOutputFileCreate' "$outputFile"
|
||||
output "${_ERROR_}: $(get_text 'errorOutputFileCreate' "$outputFile")!\n"
|
||||
return 1
|
||||
fi
|
||||
|
||||
config_load 'dhcp'
|
||||
if [ "$dnsmasq_instance" = "*" ]; then
|
||||
config_foreach _dnsmasq_instance_config 'dnsmasq' "$dns"
|
||||
|
@ -947,8 +981,21 @@ resolver() {
|
|||
|
||||
case "$dns" in
|
||||
dnsmasq.*)
|
||||
if [ -n "$dnsmasqFileList" ]; then
|
||||
local i
|
||||
for i in $dnsmasqFileList; do
|
||||
chmod 660 "$i"
|
||||
chown root:dnsmasq "$i" >/dev/null 2>/dev/null
|
||||
done
|
||||
elif [ -s "$outputFile" ]; then
|
||||
chmod 660 "$outputFile"
|
||||
chown root:dnsmasq "$outputFile" >/dev/null 2>/dev/null
|
||||
else
|
||||
json set status 'statusFail'
|
||||
json add error 'errorNoOutputFile' "$outputFile"
|
||||
output "${_ERROR_}: $(get_text 'errorNoOutputFile' "$outputFile")!\n"
|
||||
return 1
|
||||
fi
|
||||
param='dnsmasq_restart'
|
||||
output_text='Restarting dnsmasq'
|
||||
;;
|
||||
|
@ -1040,12 +1087,44 @@ cache() {
|
|||
local R_TMP
|
||||
case "$1" in
|
||||
create|backup)
|
||||
if [ -n "$dnsmasqFileList" ]; then
|
||||
local i __firstFile
|
||||
for i in $dnsmasqFileList; do
|
||||
if [ -z "$__firstFile" ]; then
|
||||
__firstFile="$i"
|
||||
if ! mv "$i" "$outputCache"; then
|
||||
json add error 'errorCreatingBackupFile' "$outputCache"
|
||||
fi
|
||||
else
|
||||
if ! rm -f "$i"; then
|
||||
json add error 'errorDeletingDataFile' "$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
[ -s "$outputFile" ] && { mv -f "$outputFile" "$outputCache"; } >/dev/null 2>/dev/null
|
||||
return $?
|
||||
fi
|
||||
;;
|
||||
restore|use)
|
||||
if [ -n "$dnsmasqFileList" ]; then
|
||||
local i __firstFile
|
||||
for i in $dnsmasqFileList; do
|
||||
if [ -z "$__firstFile" ]; then
|
||||
__firstFile="$i"
|
||||
if ! mv "$outputCache" "$i"; then
|
||||
json add error 'errorRestoringBackupFile' "$i"
|
||||
fi
|
||||
else
|
||||
if ! cp "$__firstFile" "$i"; then
|
||||
json add error 'errorRestoringBackupFile' "$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
[ -s "$outputCache" ] && mv "$outputCache" "$outputFile" >/dev/null 2>/dev/null
|
||||
return $?
|
||||
fi
|
||||
;;
|
||||
test)
|
||||
[ -s "$outputCache" ]
|
||||
|
@ -1191,12 +1270,25 @@ download_dnsmasq_file() {
|
|||
rm -f "$runningErrorFile"
|
||||
fi
|
||||
output 2 'Moving dnsmasq file '
|
||||
if mv "$B_TMP" "$outputFile"; then
|
||||
local i __firstFile
|
||||
for i in $dnsmasqFileList; do
|
||||
if [ -z "$__firstFile" ]; then
|
||||
__firstFile="$i"
|
||||
if mv "$B_TMP" "$i"; then
|
||||
output 2 "$__OK__\n"
|
||||
else
|
||||
output 2 "$__FAIL__\n"
|
||||
json add error 'errorMovingDataFile'
|
||||
json add error 'errorMovingDataFile' "$i"
|
||||
fi
|
||||
else
|
||||
if cp "$__firstFile" "$i"; then
|
||||
output 2 "$__OK__\n"
|
||||
else
|
||||
output 2 "$__FAIL__\n"
|
||||
json add error 'errorCopyingDataFile' "$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
output 1 '\n'
|
||||
}
|
||||
|
||||
|
@ -1417,15 +1509,15 @@ $(sed '/^[[:space:]]*$/d' "$A_TMP")"
|
|||
json set message "$(get_text 'statusProcessing'): creating dnsmasq addnhosts file"
|
||||
;;
|
||||
dnsmasq.conf)
|
||||
output 2 'Creating dnsmasq config file '
|
||||
output 2 'Creating dnsmasq config file(s) '
|
||||
json set message "$(get_text 'statusProcessing'): creating dnsmasq config file"
|
||||
;;
|
||||
dnsmasq.ipset)
|
||||
output 2 'Creating dnsmasq ipset file '
|
||||
output 2 'Creating dnsmasq ipset file(s) '
|
||||
json set message "$(get_text 'statusProcessing'): creating dnsmasq ipset file"
|
||||
;;
|
||||
dnsmasq.nftset)
|
||||
output 2 'Creating dnsmasq nft set file '
|
||||
output 2 'Creating dnsmasq nft set file(s) '
|
||||
json set message "$(get_text 'statusProcessing'): creating dnsmasq nft set file"
|
||||
;;
|
||||
dnsmasq.servers)
|
||||
|
@ -1450,16 +1542,45 @@ $(sed '/^[[:space:]]*$/d' "$A_TMP")"
|
|||
;;
|
||||
esac
|
||||
|
||||
case "$dns" in
|
||||
dnsmasq.conf|dnsmasq.ipset|dnsmasq.nftset)
|
||||
local i __firstFile
|
||||
for i in $dnsmasqFileList; do
|
||||
if [ -z "$__firstFile" ]; then
|
||||
__firstFile="$i"
|
||||
if mv "$B_TMP" "$i"; then
|
||||
output 2 "$__OK__\n"
|
||||
else
|
||||
output 2 "$__FAIL__\n"
|
||||
json add error 'errorMovingDataFile' "$i"
|
||||
fi
|
||||
else
|
||||
if cp "$__firstFile" "$i"; then
|
||||
output 2 "$__OK__\n"
|
||||
else
|
||||
output 2 "$__FAIL__\n"
|
||||
json add error 'errorCopyingDataFile' "$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
;;
|
||||
unbound.adb_list)
|
||||
if mv "$B_TMP" "$outputFile"; then
|
||||
output_ok
|
||||
else
|
||||
output_failn
|
||||
json add error 'errorMovingDataFile'
|
||||
json add error 'errorMovingDataFile' "$outputFile"
|
||||
fi
|
||||
case "$dns" in
|
||||
unbound.adb_list)
|
||||
sed -i '1 i\server:' "$outputFile"
|
||||
;;
|
||||
*)
|
||||
if mv "$B_TMP" "$outputFile"; then
|
||||
output_ok
|
||||
else
|
||||
output_failn
|
||||
json add error 'errorMovingDataFile' "$outputFile"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if [ "$compressed_cache" -gt 0 ]; then
|
||||
output 2 'Creating compressed cache '
|
||||
|
@ -1506,20 +1627,26 @@ adb_allow() {
|
|||
for c in $string; do
|
||||
output 2 " $c "
|
||||
hf="$(echo "$c" | sed 's/\./\\./g')"
|
||||
if sed -i "\:\(/\|\.\)${hf}/:d" "$outputFile" && \
|
||||
uci_add_list_if_new "${packageName}" 'config' 'allowed_domain' "$c"; then
|
||||
local f
|
||||
for f in ${dnsmasqFileList:-$outputFile}; do
|
||||
if sed -i "\:\(/\|\.\)${hf}/:d" "$f"; then
|
||||
output_ok
|
||||
else
|
||||
output_fail
|
||||
fi
|
||||
done
|
||||
if [ -n "$outputAllowFilter" ]; then
|
||||
if echo "$c" | sed -E "$outputAllowFilter" >> "$outputFile" && \
|
||||
uci_add_list_if_new "${packageName}" 'config' 'allowed_domain' "$c"; then
|
||||
if echo "$c" | sed -E "$outputAllowFilter" >> "$outputFile"; then
|
||||
output_ok
|
||||
else
|
||||
output_fail
|
||||
fi
|
||||
fi
|
||||
if uci_add_list_if_new "${packageName}" 'config' 'allowed_domain' "$c"; then
|
||||
output_ok
|
||||
else
|
||||
output_fail
|
||||
fi
|
||||
done
|
||||
if [ "$compressed_cache" -gt 0 ]; then
|
||||
output 2 'Creating compressed cache '
|
||||
|
|
Loading…
Reference in New Issue