mirror of
https://github.com/novatiq/packages.git
synced 2026-04-30 07:28:39 +01:00
simple-adblock: racially-neutral names
Signed-off-by: Stan Grishin <stangri@melmac.net>
This commit is contained in:
@@ -3,12 +3,16 @@
|
||||
# shellcheck disable=SC2039,SC1091
|
||||
PKG_VERSION='dev-test'
|
||||
|
||||
export START=94
|
||||
export USE_PROCD=1
|
||||
export LC_ALL=C
|
||||
# shellcheck disable=SC2034
|
||||
START=94
|
||||
# shellcheck disable=SC2034
|
||||
USE_PROCD=1
|
||||
LC_ALL=C
|
||||
|
||||
export EXTRA_COMMANDS='check dl killcache sizes show'
|
||||
export EXTRA_HELP=' check Checks if specified domain is found in current blacklist
|
||||
# shellcheck disable=SC2034
|
||||
EXTRA_COMMANDS='check dl killcache sizes show'
|
||||
# shellcheck disable=SC2034
|
||||
EXTRA_HELP=' check Checks if specified domain is found in current block-list
|
||||
dl Force-downloads all enabled block-list
|
||||
sizes Displays the file-sizes of enabled block-lists
|
||||
show Shows the service last-run status'
|
||||
@@ -44,23 +48,12 @@ readonly sharedMemoryError="/dev/shm/$packageName-error"
|
||||
readonly sharedMemoryOutput="/dev/shm/$packageName-output"
|
||||
readonly hostsFilter='/localhost/d;/^#/d;/^[^0-9]/d;s/^0\.0\.0\.0.//;s/^127\.0\.0\.1.//;s/[[:space:]]*#.*$//;s/[[:cntrl:]]$//;s/[[:space:]]//g;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/\./!d;/^$/d;/[^[:alnum:]_.-]/d;'
|
||||
readonly domainsFilter='/^#/d;s/[[:space:]]*#.*$//;s/[[:space:]]*$//;s/[[:cntrl:]]$//;/[[:space:]]/d;/[`~!@#\$%\^&\*()=+;:"'\'',<>?/\|[{}]/d;/]/d;/\./!d;/^$/d;/[^[:alnum:]_.-]/d;'
|
||||
readonly checkmark='\xe2\x9c\x93'
|
||||
readonly xmark='\xe2\x9c\x97'
|
||||
readonly _OK_='\033[0;32m\xe2\x9c\x93\033[0m'
|
||||
readonly _FAIL_='\033[0;31m\xe2\x9c\x97\033[0m'
|
||||
readonly __OK__='\033[0;32m[\xe2\x9c\x93]\033[0m'
|
||||
readonly __FAIL__='\033[0;31m[\xe2\x9c\x97]\033[0m'
|
||||
readonly _ERROR_='\033[0;31mERROR\033[0m'
|
||||
|
||||
readonly messageSuccess='Success'
|
||||
readonly messageFail='Fail'
|
||||
readonly messageDownloading='Downloading'
|
||||
readonly messageReloading='Reloading'
|
||||
readonly messageRestarting='Restarting'
|
||||
readonly messageStarting='Starting'
|
||||
readonly messageForceReloading='Force-Reloading'
|
||||
readonly messageProcessing='Processing'
|
||||
readonly messageStopped='Stopped'
|
||||
getStatusText() {
|
||||
local _ret
|
||||
case "$1" in
|
||||
@@ -70,6 +63,7 @@ getStatusText() {
|
||||
statusRestarting) _ret="Restarting";;
|
||||
statusForceReloading) _ret="Force Reloading";;
|
||||
statusDownloading) _ret="Downloading";;
|
||||
statusProcessing) _ret="Processing";;
|
||||
statusError) _ret="Error";;
|
||||
statusWarning) _ret="Warning";;
|
||||
statusFail) _ret="Fail";;
|
||||
@@ -85,14 +79,14 @@ getErrorText() {
|
||||
errorSharedMemory) _ret="failed to access shared memory";;
|
||||
errorSorting) _ret="failed to sort data file";;
|
||||
errorOptimization) _ret="failed to optimize data file";;
|
||||
errorWhitelistProcessing) _ret="failed to process whitelist";;
|
||||
errorAllowListProcessing) _ret="failed to process allow-list";;
|
||||
errorDataFileFormatting) _ret="failed to format data file";;
|
||||
errorMovingDataFile) _ret="failed to move data file '${A_TMP}' to '${outputFile}'";;
|
||||
errorCreatingCompressedCache) _ret="failed to create compressed cache";;
|
||||
errorRemovingTempFiles) _ret="failed to remove temporary files";;
|
||||
errorRestoreCompressedCache) _ret="failed to unpack compressed cache";;
|
||||
errorRestoreCache) _ret="failed to move '$outputCache' to '$outputFile'";;
|
||||
errorOhSnap) _ret="failed to create blocklist or restart DNS resolver";;
|
||||
errorOhSnap) _ret="failed to create block-list or restart DNS resolver";;
|
||||
errorStopping) _ret="failed to stop $serviceName";;
|
||||
errorDNSReload) _ret="failed to reload/restart DNS resolver";;
|
||||
errorDownloadingList) _ret="failed to download";;
|
||||
@@ -108,8 +102,8 @@ output_ok() { output 1 "$_OK_"; output 2 "$__OK__\\n"; }
|
||||
output_okn() { output 1 "$_OK_\\n"; output 2 "$__OK__\\n"; }
|
||||
output_fail() { output 1 "$_FAIL_"; output 2 "$__FAIL__\\n"; }
|
||||
output_failn() { output 1 "$_FAIL_\\n"; output 2 "$__FAIL__\\n"; }
|
||||
# str_replace() { printf "%b" "$1" | sed -e "s/$(printf "%b" "$2")/$(printf "%b" "$3")/g"; }
|
||||
# str_contains() { test "$1" != "$(str_replace "$1" "$2" '')"; }
|
||||
str_replace() { printf "%b" "$1" | sed -e "s/$(printf "%b" "$2")/$(printf "%b" "$3")/g"; }
|
||||
str_contains() { test "$1" != "$(str_replace "$1" "$2" '')"; }
|
||||
compare_versions() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; }
|
||||
is_chaos_calmer() { ubus -S call system board | grep -q 'Chaos Calmer'; }
|
||||
is_ipset_procd() { compare_versions "$(sed -ne 's/^Version: //p' /usr/lib/opkg/info/firewall.control)" "2019-09-18"; }
|
||||
@@ -139,13 +133,33 @@ output() {
|
||||
fi
|
||||
}
|
||||
|
||||
export serviceEnabled forceDNS parallelDL debug allowIDN compressedCache
|
||||
export targetDNS bootDelay dlTimeout curlRetry verbosity=1 led dnsInstance
|
||||
export whitelist_domains blacklist_domains
|
||||
export whitelist_domains_urls blacklist_domains_urls blacklist_hosts_urls
|
||||
export wan_if wan_gw wanphysdev dl_command serviceStatus dl_flag
|
||||
export outputFilter outputFilterIPv6 outputFile outputGzip outputCache ipv6Enabled
|
||||
export is_ssl_supported
|
||||
serviceEnabled=1
|
||||
forceDNS=1
|
||||
parallelDL=1
|
||||
debug=0
|
||||
compressedCache=0
|
||||
ipv6Enabled=0
|
||||
bootDelay=120
|
||||
dlTimeout=20
|
||||
curlRetry=3
|
||||
verbosity=2
|
||||
led=''
|
||||
targetDNS=dnsmasq.servers
|
||||
dnsInstance=0
|
||||
allowed_domains=''
|
||||
blocked_domains=''
|
||||
allowed_domains_urls=''
|
||||
blocked_domains_urls=''
|
||||
blocked_hosts_urls=''
|
||||
dl_command=''
|
||||
dl_flag=''
|
||||
outputFilter=''
|
||||
outputFilterIPv6=''
|
||||
outputFile=''
|
||||
outputGzip=''
|
||||
outputCache=''
|
||||
isSSLSupported=''
|
||||
allowIDN=0
|
||||
|
||||
load_package_config() {
|
||||
config_load "$packageName"
|
||||
@@ -162,11 +176,11 @@ load_package_config() {
|
||||
config_get led 'config' 'led'
|
||||
config_get targetDNS 'config' 'dns' 'dnsmasq.servers'
|
||||
config_get dnsInstance 'config' 'dns_instance' '0'
|
||||
config_get whitelist_domains 'config' 'whitelist_domain'
|
||||
config_get blacklist_domains 'config' 'blacklist_domain'
|
||||
config_get whitelist_domains_urls 'config' 'whitelist_domains_url'
|
||||
config_get blacklist_domains_urls 'config' 'blacklist_domains_url'
|
||||
config_get blacklist_hosts_urls 'config' 'blacklist_hosts_url'
|
||||
config_get allowed_domains 'config' 'allowed_domain'
|
||||
config_get allowed_domains_urls 'config' 'allowed_domains_url'
|
||||
config_get blocked_domains 'config' 'blocked_domain'
|
||||
config_get blocked_domains_urls 'config' 'blocked_domains_url'
|
||||
config_get blocked_hosts_urls 'config' 'blocked_hosts_url'
|
||||
|
||||
if [ "$targetDNS" != 'dnsmasq.addnhosts' ] && [ "$targetDNS" != 'dnsmasq.conf' ] && \
|
||||
[ "$targetDNS" != 'dnsmasq.servers' ] && [ "$targetDNS" != 'unbound.adb_list' ] && \
|
||||
@@ -249,13 +263,14 @@ load_package_config() {
|
||||
|| grep -q "libustream-mbedtls" /usr/lib/opkg/status \
|
||||
|| grep -q "libustream-openssl" /usr/lib/opkg/status \
|
||||
|| grep -q "libustream-wolfssl" /usr/lib/opkg/status; then
|
||||
is_ssl_supported=1
|
||||
isSSLSupported=1
|
||||
else
|
||||
unset is_ssl_supported
|
||||
unset isSSLSupported
|
||||
fi
|
||||
}
|
||||
|
||||
is_enabled() {
|
||||
wan_if=''; wan_gw='';
|
||||
load_package_config
|
||||
|
||||
if [ "$debug" -ne 0 ]; then
|
||||
@@ -457,7 +472,7 @@ tmpfs() {
|
||||
stats)
|
||||
printf "%b" "$stats"; return;;
|
||||
triggers)
|
||||
curReload="$parallelDL $debug $dlTimeout $whitelist_domains $blacklist_domains $whitelist_domains_urls $blacklist_domains_urls $blacklist_hosts_urls $targetDNS"
|
||||
curReload="$parallelDL $debug $dlTimeout $allowed_domains $blocked_domains $allowed_domains_urls $blocked_domains_urls $blocked_hosts_urls $targetDNS"
|
||||
curRestart="$compressedCache $forceDNS $led"
|
||||
if [ ! -s "$jsonFile" ]; then
|
||||
ret='on_boot'
|
||||
@@ -513,7 +528,7 @@ tmpfs() {
|
||||
stats)
|
||||
stats="$value";;
|
||||
triggers)
|
||||
readReload="$parallelDL $debug $dlTimeout $whitelist_domains $blacklist_domains $whitelist_domains_urls $blacklist_domains_urls $blacklist_hosts_urls $targetDNS"
|
||||
readReload="$parallelDL $debug $dlTimeout $allowed_domains $blocked_domains $allowed_domains_urls $blocked_domains_urls $blocked_hosts_urls $targetDNS"
|
||||
readRestart="$compressedCache $forceDNS $led"
|
||||
;;
|
||||
esac
|
||||
@@ -678,7 +693,7 @@ process_url() {
|
||||
else
|
||||
type='Allowed'; D_TMP="$A_TMP";
|
||||
fi
|
||||
if [ "${1:0:5}" == "https" ] && [ -z "$is_ssl_supported" ]; then
|
||||
if [ "${1:0:5}" == "https" ] && [ -z "$isSSLSupported" ]; then
|
||||
output 1 "$_FAIL_"
|
||||
output 2 "[DL] $type $label $__FAIL__\\n"
|
||||
echo "errorNoSSLSupport|${1}" >> "$sharedMemoryError"
|
||||
@@ -710,7 +725,7 @@ process_url() {
|
||||
download_lists() {
|
||||
local hf w_filter j=0 R_TMP
|
||||
|
||||
tmpfs set message "${messageDownloading}..."
|
||||
tmpfs set message "$(getStatusText "statusDownloading")..."
|
||||
tmpfs set status "statusDownloading"
|
||||
|
||||
rm -f "$A_TMP" "$B_TMP" "$outputFile" "$outputCache" "$outputGzip"
|
||||
@@ -725,8 +740,8 @@ download_lists() {
|
||||
touch $A_TMP; touch $B_TMP;
|
||||
output 1 'Downloading lists '
|
||||
rm -f "$sharedMemoryError"
|
||||
if [ -n "$blacklist_hosts_urls" ]; then
|
||||
for hf in ${blacklist_hosts_urls}; do
|
||||
if [ -n "$blocked_hosts_urls" ]; then
|
||||
for hf in ${blocked_hosts_urls}; do
|
||||
if [ "$parallelDL" -gt 0 ]; then
|
||||
process_url "$hf" 'hosts' 'blocked' &
|
||||
else
|
||||
@@ -734,8 +749,8 @@ download_lists() {
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "$blacklist_domains_urls" ]; then
|
||||
for hf in ${blacklist_domains_urls}; do
|
||||
if [ -n "$blocked_domains_urls" ]; then
|
||||
for hf in ${blocked_domains_urls}; do
|
||||
if [ "$parallelDL" -gt 0 ]; then
|
||||
process_url "$hf" 'domains' 'blocked' &
|
||||
else
|
||||
@@ -743,8 +758,8 @@ download_lists() {
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "$whitelist_domains_urls" ]; then
|
||||
for hf in ${whitelist_domains_urls}; do
|
||||
if [ -n "$allowed_domains_urls" ]; then
|
||||
for hf in ${allowed_domains_urls}; do
|
||||
if [ "$parallelDL" -gt 0 ]; then
|
||||
process_url "$hf" 'domains' 'allowed' &
|
||||
else
|
||||
@@ -761,16 +776,16 @@ download_lists() {
|
||||
rm -f "$sharedMemoryError"
|
||||
fi
|
||||
|
||||
[ -n "$blacklist_domains" ] && for hf in ${blacklist_domains}; do echo "$hf" | sed "$domainsFilter" >> $B_TMP; done
|
||||
whitelist_domains="${whitelist_domains}
|
||||
[ -n "$blocked_domains" ] && for hf in ${blocked_domains}; do echo "$hf" | sed "$domainsFilter" >> $B_TMP; done
|
||||
allowed_domains="${allowed_domains}
|
||||
$(cat $A_TMP)"
|
||||
[ -n "$whitelist_domains" ] && for hf in ${whitelist_domains}; do hf="$(echo "$hf" | sed 's/\./\\./g')"; w_filter="$w_filter/^${hf}$/d;/\\.${hf}$/d;"; done
|
||||
[ -n "$allowed_domains" ] && for hf in ${allowed_domains}; do hf="$(echo "$hf" | sed 's/\./\\./g')"; w_filter="$w_filter/^${hf}$/d;/\\.${hf}$/d;"; done
|
||||
|
||||
[ ! -s "$B_TMP" ] && return 1
|
||||
|
||||
output 1 'Processing downloads '
|
||||
output 2 'Sorting combined list '
|
||||
tmpfs set message "$messageProcessing: sorting combined list"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): sorting combined list"
|
||||
if [ "$allowIDN" -gt 0 ]; then
|
||||
if sort -u "$B_TMP" > "$A_TMP"; then
|
||||
output_ok
|
||||
@@ -793,7 +808,7 @@ $(cat $A_TMP)"
|
||||
[ "$targetDNS" = 'unbound.adb_list' ]; then
|
||||
# TLD optimization written by Dirk Brenken (dev@brenken.org)
|
||||
output 2 'Optimizing combined list '
|
||||
tmpfs set message "$messageProcessing: optimizing combined list"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): optimizing combined list"
|
||||
# sed -E 'G;:t;s/(.*)(\.)(.*)(\n)(.*)/\1\4\5\2\3/;tt;s/(.*)\n(\.)(.*)/\3\2\1/' is actually slower than awk
|
||||
if awk -F "." '{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "$A_TMP" > "$B_TMP"; then
|
||||
if sort "$B_TMP" > "$A_TMP"; then
|
||||
@@ -828,17 +843,17 @@ $(cat $A_TMP)"
|
||||
mv "$A_TMP" "$B_TMP"
|
||||
fi
|
||||
|
||||
output 2 'Whitelisting domains '
|
||||
tmpfs set message "$messageProcessing: whitelisting domains"
|
||||
output 2 'Allowing domains '
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): allowing domains"
|
||||
if sed -i "$w_filter" "$B_TMP"; then
|
||||
output_ok
|
||||
else
|
||||
output_failn
|
||||
tmpfs add error "errorWhitelistProcessing"
|
||||
tmpfs add error "errorAllowListProcessing"
|
||||
fi
|
||||
|
||||
output 2 'Formatting merged file '
|
||||
tmpfs set message "$messageProcessing: formatting merged file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): formatting merged file"
|
||||
if [ -z "$outputFilterIPv6" ]; then
|
||||
if sed "$outputFilter" "$B_TMP" > "$A_TMP"; then
|
||||
output_ok
|
||||
@@ -863,23 +878,23 @@ $(cat $A_TMP)"
|
||||
case "$targetDNS" in
|
||||
dnsmasq.addnhosts)
|
||||
output 2 'Creating DNSMASQ addnhosts file '
|
||||
tmpfs set message "$messageProcessing: creating DNSMASQ addnhosts file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating DNSMASQ addnhosts file"
|
||||
;;
|
||||
dnsmasq.conf)
|
||||
output 2 'Creating DNSMASQ config file '
|
||||
tmpfs set message "$messageProcessing: creating DNSMASQ config file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating DNSMASQ config file"
|
||||
;;
|
||||
dnsmasq.ipset)
|
||||
output 2 'Creating DNSMASQ ipset file '
|
||||
tmpfs set message "$messageProcessing: creating DNSMASQ ipset file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating DNSMASQ ipset file"
|
||||
;;
|
||||
dnsmasq.servers)
|
||||
output 2 'Creating DNSMASQ servers file '
|
||||
tmpfs set message "$messageProcessing: creating DNSMASQ servers file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating DNSMASQ servers file"
|
||||
;;
|
||||
unbound.adb_list)
|
||||
output 2 'Creating Unbound adb_list file '
|
||||
tmpfs set message "$messageProcessing: creating Unbound adb_list file"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating Unbound adb_list file"
|
||||
;;
|
||||
esac
|
||||
if mv "$A_TMP" "$outputFile"; then
|
||||
@@ -890,7 +905,7 @@ $(cat $A_TMP)"
|
||||
fi
|
||||
if [ "$compressedCache" -gt 0 ]; then
|
||||
output 2 'Creating compressed cache '
|
||||
tmpfs set message "$messageProcessing: creating compressed cache"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): creating compressed cache"
|
||||
if cacheOps 'createGzip'; then
|
||||
output_ok
|
||||
else
|
||||
@@ -901,7 +916,7 @@ $(cat $A_TMP)"
|
||||
rm -f "$outputGzip"
|
||||
fi
|
||||
output 2 'Removing temporary files '
|
||||
tmpfs set message "$messageProcessing: removing temporary files"
|
||||
tmpfs set message "$(getStatusText "statusProcessing"): removing temporary files"
|
||||
rm -f "/tmp/${packageName}_tmp.*" "$A_TMP" "$B_TMP" "$outputCache" || j=1
|
||||
if [ $j -eq 0 ]; then
|
||||
output_ok
|
||||
@@ -1173,7 +1188,7 @@ check() {
|
||||
local string="$1"
|
||||
local c="$(grep -c "$string" "$outputFile")"
|
||||
if [ ! -s "$outputFile" ]; then
|
||||
echo "No blacklist ('$outputFile') found."
|
||||
echo "No block-list ('$outputFile') found."
|
||||
elif [ -z "$string" ]; then
|
||||
echo "Usage: /etc/init.d/${packageName} check string"
|
||||
elif [ "$c" -gt 0 ]; then
|
||||
@@ -1195,7 +1210,7 @@ check() {
|
||||
grep "$string" "$outputFile" | sed 's|^local-zone: "||;s|" static$||;';;
|
||||
esac
|
||||
else
|
||||
echo "The $string is not found in current blacklist ('$outputFile')."
|
||||
echo "The $string is not found in current block-list ('$outputFile')."
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1204,39 +1219,39 @@ sizes() {
|
||||
load_package_config
|
||||
echo "# $(date)"
|
||||
|
||||
for i in $blacklist_domains_urls; do
|
||||
for i in $blocked_domains_urls; do
|
||||
[ "${i//melmac}" != "$i" ] && continue
|
||||
if $dl_command "$i" $dl_flag /tmp/sast 2>/dev/null && [ -s /tmp/sast ]; then
|
||||
echo "# File size: $(du -sh /tmp/sast | awk '{print $1}')"
|
||||
if compare_versions "$(du -sk /tmp/sast)" "500"; then
|
||||
echo "# blocklist too big for most routers"
|
||||
echo "# block-list too big for most routers"
|
||||
elif compare_versions "$(du -sk /tmp/sast)" "100"; then
|
||||
echo "# blocklist may be too big for some routers"
|
||||
echo "# block-list may be too big for some routers"
|
||||
fi
|
||||
rm -rf /tmp/sast
|
||||
echo " list blacklist_domains_url '$i'"
|
||||
echo " list blocked_domains_url '$i'"
|
||||
echo ""
|
||||
else
|
||||
echo "# site was down on last check"
|
||||
echo "# list blacklist_domains_url '$i'"
|
||||
echo "# list blocked_domains_url '$i'"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
for i in $blacklist_hosts_urls; do
|
||||
for i in $blocked_hosts_urls; do
|
||||
if $dl_command "$i" $dl_flag /tmp/sast 2>/dev/null && [ -s /tmp/sast ]; then
|
||||
echo "# File size: $(du -sh /tmp/sast | awk '{print $1}')"
|
||||
if compare_versions "$(du -sk /tmp/sast)" "500"; then
|
||||
echo "# blocklist too big for most routers"
|
||||
echo "# block-list too big for most routers"
|
||||
elif compare_versions "$(du -sk /tmp/sast)" "100"; then
|
||||
echo "# blocklist may be too big for some routers"
|
||||
echo "# block-list may be too big for some routers"
|
||||
fi
|
||||
rm -rf /tmp/sast
|
||||
echo " list blacklist_hosts_url '$i'"
|
||||
echo " list blocked_hosts_url '$i'"
|
||||
echo ""
|
||||
else
|
||||
echo "# site was down on last check"
|
||||
echo "# list blacklist_hosts_url '$i'"
|
||||
echo "# list blocked_hosts_url '$i'"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user