adblock-fast: bugfix: better detect ABP lists 22221/head
authorStan Grishin <stangri@melmac.ca>
Tue, 26 Sep 2023 22:46:55 +0000 (22:46 +0000)
committerStan Grishin <stangri@melmac.ca>
Tue, 26 Sep 2023 22:48:37 +0000 (22:48 +0000)
* bugfix: better detect ABP lists
* update Makefile with BUSYBOX features dependencies
* update the type of dnsmasq_instance setting
* add error message when file type can't be detected
* add reporting when file type can't be detected
* bugfix: include URL on errors related to URL processing/parsing
* rename resolver function to resolver_config to better reflect its use

Signed-off-by: Stan Grishin <stangri@melmac.ca>
net/adblock-fast/Makefile
net/adblock-fast/files/etc/config/adblock-fast
net/adblock-fast/files/etc/init.d/adblock-fast

index 317a3d1aae07b26c6dc3b83c42eec1f7a5d005e7..72a3324ac08c41ed7c2fc6767724f2c0de0fd39d 100644 (file)
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=adblock-fast
 PKG_VERSION:=1.0.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
 PKG_LICENSE:=GPL-3.0-or-later
 
@@ -18,6 +18,10 @@ define Package/adblock-fast
   TITLE:=AdBlock Fast Service
   URL:=https://docs.openwrt.melmac.net/adblock-fast/
   DEPENDS:=+jshn +curl
+       DEPENDS+=+!BUSYBOX_DEFAULT_AWK:gawk
+       DEPENDS+=+!BUSYBOX_DEFAULT_GREP:grep
+       DEPENDS+=+!BUSYBOX_DEFAULT_SED:sed
+       DEPENDS+=+!BUSYBOX_DEFAULT_SORT:coreutils-sort
   CONFLICTS:=simple-adblock
   PROVIDES:=simple-adblock
   PKGARCH:=all
index 10cdf5186ea7b1866154102e4938c78242f95a39..f459411f03fd5a7bc2725aeaf6f7e39b088dbf0b 100644 (file)
@@ -13,7 +13,7 @@ config adblock-fast 'config'
        option curl_retry '3'
        option debug '0'
        option dns 'dnsmasq.servers'
-       option dnsmasq_instance '*'
+       list dnsmasq_instance '*'
 #      option dnsmasq_config_file_url 'https://big.oisd.nl/dnsmasq2'
        option download_timeout '10'
        option force_dns '1'
index 2a75e69383690daa5d405ec7c0efd9b11eecbddb..6d0cade3f48561427ff1cbf57f1a283b642455cc 100755 (executable)
@@ -151,6 +151,7 @@ get_text() {
                errorParsingList) r="failed to parse";;
                errorNoSSLSupport) r="no HTTPS/SSL support on device";;
                errorCreatingDirectory) r="failed to create output/cache/gzip file directory";;
+               errorDetectingFileType) r="failed to detect format";;
 
                statusNoInstall) r="$serviceName is not installed or not found";;
                statusStopped) r="Stopped";;
@@ -268,20 +269,35 @@ append_url() {
        fi
 }
 
-detect_file_type() {
-       local file="$1"
-       if [ "$(head -1 "$file")" = '[Adblock Plus]' ]; then
-               echo 'adBlockPlus'
-       elif grep -q '^server=' "$file"; then
-               echo 'dnsmasqFile'
-       elif grep -q '^local=' "$file"; then
-               echo 'dnsmasq2File'
-       elif grep -q '^0.0.0.0' "$file" || grep -q '^127.0.0.1' "$file"; then
-               echo 'hosts'
-       else
-               echo 'domains'
-       fi
-}
+ detect_file_type() {
+       local file="$1"
+       if [ "$(head -1 "$file")" = '[Adblock Plus]' ] || \
+               grep -q '^||' "$file"; then
+               echo 'adBlockPlus'
+       elif grep -q '^server=' "$file"; then
+               echo 'dnsmasqFile'
+       elif grep -q '^local=' "$file"; then
+               echo 'dnsmasq2File'
+       elif grep -q '^0.0.0.0' "$file" || grep -q '^127.0.0.1' "$file"; then
+               echo 'hosts'
+       elif [ -n "$(sed "$domainsFilter" "$file" | head -1)" ]; then
+               echo 'domains'
+       fi
+ }
+# detect_file_type() {
+#      local file="$1"
+#      if [ -n "$(sed "$adBlockPlusFilter" "$file" | head -1)" ]; then
+#              echo 'adBlockPlus'
+#      elif [ -n "$(sed "$dnsmasqFileFilter" "$file" | head -1)" ]; then
+#              echo 'dnsmasqFile'
+#      elif [ -n "$(sed "$dnsmasq2FileFilter" "$file" | head -1)" ]; then
+#              echo 'dnsmasq2File'
+#      elif [ -n "$(sed "$hostsFilter" "$file" | head -1)" ]; then
+#              echo 'hosts'
+#      elif [ -n "$(sed "$domainsFilter" "$file" | head -1)" ]; then
+#              echo 'domains'
+#      fi
+# }
 
 load_environment() {
        local i j
@@ -543,7 +559,7 @@ get_local_filesize() {
        echo -en "$size"
 }
 
-resolver() {
+resolver_config() {
        local cfg="$1" param="$2"
        case "$param" in
                dnsmasq.addnhosts)
@@ -580,10 +596,10 @@ dns() {
 
                        config_load 'dhcp'
                        if [ "$dnsmasq_instance" = "*" ]; then
-                               config_foreach resolver 'dnsmasq' "$dns"
+                               config_foreach resolver_config 'dnsmasq' "$dns"
                        elif [ -n "$dnsmasq_instance" ]; then
                                for i in $dnsmasq_instance; do
-                                       resolver "@dnsmasq[$i]" "$dns" || resolver "$i" "$dns"
+                                       resolver_config "@dnsmasq[$i]" "$dns" || resolver_config "$i" "$dns"
                                done
                        fi
 
@@ -849,16 +865,23 @@ process_file_url() {
                format="$(detect_file_type "$R_TMP")"
                case "$format" in
                        adBlockPlus) filter="$adBlockPlusFilter";;
-#                      dnsmasqFile) filter="$dnsmasqFileFilter";;
-#                      dnsmasq2File) filter="$dnsmasq2FileFilter";;
+                       dnsmasqFile) filter="$dnsmasqFileFilter";;
+                       dnsmasq2File) filter="$dnsmasq2FileFilter";;
                        domains) filter="$domainsFilter";;
                        hosts) filter="$hostsFilter";;
+                       *)
+                               output 1 "$_FAIL_"
+                               output 2 "[DL] $type $label $__FAIL__\\n"
+                               echo "errorDetectingFileType|${url}" >> "$sharedMemoryError"
+                               rm -f "$R_TMP"
+                               return 0
+                       ;;
                esac
-               [ -n "$filter" ] && sed -i "$filter" "$R_TMP"
+               sed -i "$filter" "$R_TMP"
                if [ ! -s "$R_TMP" ]; then
                        output 1 "$_FAIL_"
                        output 2 "[DL] $type $label ($format) $__FAIL__\\n"
-                       echo "errorParsingList|${1}" >> "$sharedMemoryError"
+                       echo "errorParsingList|${url}" >> "$sharedMemoryError"
                else
                        cat "${R_TMP}" >> "$D_TMP"
                        output 1 "$_OK_"
@@ -1596,7 +1619,7 @@ killcache() {
        rm -f "$dnsmasqServersCache" "${compressed_cache_dir}/${dnsmasqServersGzip}"
        rm -f "$unboundCache" "$unboundGzip"
        config_load 'dhcp'
-       config_foreach resolver 'dnsmasq' 'cleanup'
+       config_foreach resolver_config 'dnsmasq' 'cleanup'
        uci_commit 'dhcp'
        return 0
 }