include $(TOPDIR)/rules.mk
PKG_NAME:=adblock
-PKG_VERSION:=4.4.2
-PKG_RELEASE:=3
+PKG_VERSION:=4.4.3
+PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0-or-later
The following feeds are just my personal recommendation as an initial setup:
* 'adguard', 'adguard_tracking' and 'certpl'
-In total, this feed selection blocks about 100K domains. It may also be useful to include compilations like hagezi, stevenblack or oisd.
-Please note: don't just blindly activate (too) many feeds at once, sooner or later this will lead to OOM conditions.
+In total, this feed selection blocks about 280K domains. It may also be useful to include compilations like hagezi, stevenblack or oisd.
+Please note: don't just blindly activate too many feeds at once, sooner or later this will lead to OOM conditions.
**DNS reporting, enable the GeoIP Map**
adblock includes a powerful reporting tool on the DNS Report tab which shows the latest DNS statistics generated by tcpdump. To get the latest statistics always press the "Refresh" button.
* [CARTO basemap styles](https://github.com/CartoDB/basemap-styles) based on [OpenMapTiles](https://openmaptiles.org/schema)
* The free and quite fast [IP Geolocation API](https://ip-api.com/) to resolve the required IP/geolocation information (max. 45 blocked Domains per request)
+**External adblock test**
+In addition to the built‑in DNS reporting and GeoIP map, adblock users can verify the effectiveness of their configuration with an external test page. The [Adblock Test](https://adblock.turtlecute.org/) provides a simple way to check whether your current adblock setup is working as expected. It loads a series of test elements (ads, trackers, and other resources) and reports whether they are successfully blocked by your configuration.
+
+The test runs entirely in the browser and does not require additional configuration. For best results, open the page in the same environment where adblock is active and review the results displayed.
+
**Use the jail mode, a restrictive DNS blocklist:**
You can enable a restrictive 'adb_list.jail' to block access to all domains except those listed in the allowlist file. Usually this list will be generated as an additional list for guest or kidsafe configurations (for a separate dns server instance). If the jail directory points to your primary dns directory, the jail blocklist replaces your default blocklist.
user dev.adblock
password xxx
</code></pre>
-Finally enable E-Mail support and add a valid E-Mail receiver address in LuCI.
+Finally enable E-Mail support, add a valid E-Mail receiver address in LuCI and setup an appropriate cron job.
-**Automatic feed updates and status reports via E-Mail**
-For a regular, automatic update of the used feeds or other regular adblock activities set up a cron job, e.g.:
+**Automatic adblock feed updates and E-Mail reports**
+For a regular, automatic update of the used feeds or other regular adblock tasks set up a cron job. In LuCI you find the cron settings under 'System' => 'Scheduled Tasks'. On the command line the cron file is located at '/etc/crontabs/root':
+Example 1
```
-# update the feeds every morning at 4 o'clock
+# update the adblock feeds every morning at 4 o'clock
00 04 * * * /etc/init.d/adblock reload
+```
-# send a report E-Mail every morning at 3 o'clock
-00 03 * * * /etc/init.d/adblock report mail
-
-# update the feeds every hour
+Example 2
+```
+# update the adblock feeds every hour
0 */1 * * * /etc/init.d/adblock reload
```
+Example 3
+```
+# send an adblock E-Mail report every morning at 3 o'clock
+00 03 * * * /etc/init.d/adblock report mail
+```
+
**Change/add adblock feeds**
The adblock blocklist feeds are stored in an external JSON file '/etc/adblock/adblock.feeds'. All custom changes should be stored in an external JSON file '/etc/adblock/adblock.custom.feeds' (empty by default). It's recommended to use the LuCI based Custom Feed Editor to make changes to this file.
A valid JSON source object contains the following information, e.g.:
-hag;multi-light;light-onlydomains.txt
-hag;multi-normal;multi-onlydomains.txt
-hag;multi-pro;pro-onlydomains.txt
-hag;multi-pro.mini;pro.mini-onlydomains.txt
-hag;multi-pro.plus;pro.plus-onlydomains.txt
-hag;multi-pro.plus.mini;pro.plus.mini-onlydomains.txt
-hag;multi-ultimate;ultimate-onlydomains.txt
-hag;multi-ultimate.mini;ultimate.mini-onlydomains.txt
-hag;threat-intelligence;tif-onlydomains.txt
-hag;threat-intelligence.medium;tif.medium-onlydomains.txt
-hag;threat-intelligence.mini;tif.mini-onlydomains.txt
-hag;anti.piracy;anti.piracy-onlydomains.txt
-hag;doh;doh-onlydomains.txt
-hag;doh-vpn-proxy-bypass;doh-vpn-proxy-bypass-onlydomains.txt
-hag;dyndns;dyndns-onlydomains.txt
-hag;fake;fake-onlydomains.txt
-hag;gambling;gambling-onlydomains.txt
-hag;gambling.medium;gambling.medium-onlydomains.txt
-hag;gambling.mini;gambling.mini-onlydomains.txt
-hag;hoster;hoster-onlydomains.txt
-hag;nsfw;nsfw-onlydomains.txt
-hag;tracker.amazon;native.amazon-onlydomains.txt
-hag;tracker.apple;native.apple-onlydomains.txt
-hag;tracker.huawei;native.huawei-onlydomains.txt
-hag;tracker.lgwebos;native.lgwebos-onlydomains.txt
-hag;tracker.oppo-realme;native.oppo-realme-onlydomains.txt
-hag;tracker.samsung;native.samsung-onlydomains.txt
-hag;tracker.tiktok;native.tiktok-onlydomains.txt
-hag;tracker.tiktok.extended;native.tiktok.extended-onlydomains.txt
-hag;tracker.vivo;native.vivo-onlydomains.txt
-hag;tracker.winoffice;native.winoffice-onlydomains.txt
-hag;tracker.xiaomi;native.xiaomi-onlydomains.txt
-hag;nosafesearch;nosafesearch-onlydomains.txt
-hag;popupads;popupads-onlydomains.txt
-hst;mini;mini/domains.wildcards
+hag;multi-light;wildcard/light-onlydomains.txt
+hag;multi-normal;wildcard/multi-onlydomains.txt
+hag;multi-pro;wildcard/pro-onlydomains.txt
+hag;multi-pro.mini;wildcard/pro.mini-onlydomains.txt
+hag;multi-pro.plus;wildcard/pro.plus-onlydomains.txt
+hag;multi-pro.plus.mini;wildcard/pro.plus.mini-onlydomains.txt
+hag;multi-ultimate;wildcard/ultimate-onlydomains.txt
+hag;multi-ultimate.mini;wildcard/ultimate.mini-onlydomains.txt
+hag;threat-intelligence;wildcard/tif-onlydomains.txt
+hag;threat-intelligence.medium;wildcard/tif.medium-onlydomains.txt
+hag;threat-intelligence.mini;wildcard/tif.mini-onlydomains.txt
+hag;anti.piracy;wildcard/anti.piracy-onlydomains.txt
+hag;doh;wildcard/doh-onlydomains.txt
+hag;doh-vpn-proxy-bypass;wildcard/doh-vpn-proxy-bypass-onlydomains.txt
+hag;dyndns;wildcard/dyndns-onlydomains.txt
+hag;fake;wildcard/fake-onlydomains.txt
+hag;gambling;wildcard/gambling-onlydomains.txt
+hag;gambling.medium;wildcard/gambling.medium-onlydomains.txt
+hag;gambling.mini;wildcard/gambling.mini-onlydomains.txt
+hag;hoster;wildcard/hoster-onlydomains.txt
+hag;nsfw;wildcard/nsfw-onlydomains.txt
+hag;tracker.amazon;wildcard/native.amazon-onlydomains.txt
+hag;tracker.apple;wildcard/native.apple-onlydomains.txt
+hag;tracker.huawei;wildcard/native.huawei-onlydomains.txt
+hag;tracker.lgwebos;wildcard/native.lgwebos-onlydomains.txt
+hag;tracker.oppo-realme;wildcard/native.oppo-realme-onlydomains.txt
+hag;tracker.samsung;wildcard/native.samsung-onlydomains.txt
+hag;tracker.tiktok;wildcard/native.tiktok-onlydomains.txt
+hag;tracker.tiktok.extended;wildcard/native.tiktok.extended-onlydomains.txt
+hag;tracker.vivo;wildcard/native.vivo-onlydomains.txt
+hag;tracker.winoffice;wildcard/native.winoffice-onlydomains.txt
+hag;tracker.xiaomi;wildcard/native.xiaomi-onlydomains.txt
+hag;nosafesearch;wildcard/nosafesearch-onlydomains.txt
+hag;popupads;wildcard/popupads-onlydomains.txt
+hag;urlshortener;wildcard/urlshortener-onlydomains.txt
+hag;abusetlds;wildcard/spam-tlds-onlydomains.txt
+hag;social;wildcard/social-onlydomains.txt
+hag;nrd-7days;domains/nrd7.txt
+hag;nrd-14days;domains/nrd14-8.txt
+hag;nrd-21days;domains/nrd21-15.txt
+hag;nrd-28days;domains/nrd28-22.txt
+hag;nrd-35days;domains/nrd35-29.txt
hst;lite;Lite/domains.wildcards
-hst;pro;Pro/domains.wildcards
hst;xtra;Xtra/domains.wildcards
stb;standard;hosts
stb;standard-fakenews;alternates/fakenews/hosts
{
"1hosts": {
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "VAR",
"descr": "compilation"
},
},
"adguard_tracking": {
"url": "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_trackers_justdomains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "tracking"
},
"android_tracking": {
"url": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/android-tracking.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "tracking"
},
"andryou": {
"url": "https://gitlab.com/andryou/block/raw/master/kouhai-compressed-domains",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "compilation"
},
"anti_ad": {
"url": "https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "compilation"
},
},
"certpl": {
"url": "https://hole.cert.pl/domains/v2/domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "phishing"
},
"cpbl": {
"url": "https://raw.githubusercontent.com/bongochong/CombinedPrivacyBlockLists/master/NoFormatting/cpbl-ctld.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XL",
"descr": "compilation"
},
"disconnect": {
"url": "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "general"
},
"divested": {
"url": "https://divested.dev/hosts-domains-wildcards",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XXL",
"descr": "compilation"
},
"doh_blocklist": {
"url": "https://raw.githubusercontent.com/dibdot/DoH-IP-blocklists/master/doh-domains_overall.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "doh_server"
},
},
"energized_blu": {
"url": "https://energized.pro/blu/domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XL",
"descr": "compilation"
},
"energized_spark": {
"url": "https://energized.pro/spark/domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "compilation"
},
"energized_ultimate": {
"url": "https://energized.pro/ultimate/domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XXL",
"descr": "compilation"
},
"firetv_tracking": {
"url": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/AmazonFireTV.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "tracking"
},
},
"hblock": {
"url": "https://hblock.molinero.dev/hosts_domains.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XL",
"descr": "compilation"
},
"hagezi": {
- "url": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "url": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "VAR",
"descr": "compilation"
},
},
"notracking": {
"url": "https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnscrypt-proxy/dnscrypt-proxy.blacklist.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XL",
"descr": "tracking"
},
"oisd_big": {
"url": "https://big.oisd.nl/domainswild2",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XXL",
"descr": "general"
},
"oisd_nsfw": {
"url": "https://nsfw.oisd.nl/domainswild2",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "XXL",
"descr": "porn"
},
"oisd_nsfw_small": {
"url": "https://nsfw-small.oisd.nl/domainswild2",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "M",
"descr": "porn"
},
"oisd_small": {
"url": "https://small.oisd.nl/domainswild2",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "L",
"descr": "general"
},
},
"phishing_army": {
"url": "https://phishing.army/download/phishing_army_blocklist_extended.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "phishing"
},
},
"smarttv_tracking": {
"url": "https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "tracking"
},
"spam404": {
"url": "https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "general"
},
},
"utcapitole": {
"url": "https://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "VAR",
"descr": "general"
},
"wally3k": {
"url": "https://v.firebog.net/hosts/static/w3kbl.txt",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "compilation"
},
},
"yoyo": {
"url": "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=0&mimetype=plaintext",
- "rule": "/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower($1)}",
+ "rule": "/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower($1)}",
"size": "S",
"descr": "general"
}
;;
"blocklist" | "allowlist")
src_name="${mode}"
- rset="/^([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}"
+ rset="/^(([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{print tolower(\$1)}"
case "${src_name}" in
"blocklist")
if [ -f "${adb_blocklist}" ]; then
"allowlist")
if [ -f "${adb_allowlist}" ] && [ "${adb_dnsallow}" != "0" ]; then
file_name="${adb_tmpdir}/tmp.raw.${src_name}"
- printf "%s\n" "${adb_lookupdomain}" | "${adb_awkcmd}" "${rset}" >"${file_name}"
+ [ "${adb_lookupdomain}" != "localhost" ] && printf "%s\n" "${adb_lookupdomain}" | "${adb_awkcmd}" "${rset}" >"${file_name}"
"${adb_awkcmd}" "${rset}" "${adb_allowlist}" >>"${file_name}"
"${adb_awkcmd}" "${rset}" "${file_name}" >"${adb_tmpdir}/tmp.rem.${src_name}"
eval "${adb_dnsallow}" "${file_name}" >"${adb_tmpdir}/tmp.add.${src_name}"
fi
case "${src_name}" in
"google")
- rset="/^\\.([[:alnum:]_-]{1,63}\\.)+[[:alpha:]]+([[:space:]]|$)/{printf \"%s\n%s\n\",tolower(\"www\"\$1),tolower(substr(\$1,2,length(\$1)))}"
+ rset="/^(\\.([[:alnum:]_-]{1,63}\\.)*[[:alnum:]-]{2,63}([[:space:]]|$))/{printf \"%s\n%s\n\",tolower(\"www\"\$1),tolower(substr(\$1,2,length(\$1)))}"
safe_url="https://www.google.com/supported_domains"
safe_cname="forcesafesearch.google.com"
if [ -s "${adb_backupdir}/safesearch.${src_name}.gz" ]; then
file_name="${adb_finaldir}/${adb_dnsfile}"
rm -f "${file_name}"
[ -n "${adb_dnsheader}" ] && printf "%b" "${adb_dnsheader}" >>"${file_name}"
- [ -s "${adb_tmpdir}/tmp.add.iplist" ] && "${adb_catcmd}" "${adb_tmpdir}/tmp.add.iplist" >>"${file_name}"
- [ -s "${adb_tmpdir}/tmp.add.allowlist" ] && "${adb_catcmd}" "${adb_tmpdir}/tmp.add.allowlist" >>"${file_name}"
+ [ -s "${adb_tmpdir}/tmp.add.iplist" ] && "${adb_sortcmd}" ${adb_srtopts} -u "${adb_tmpdir}/tmp.add.iplist" >>"${file_name}"
+ [ -s "${adb_tmpdir}/tmp.add.allowlist" ] && "${adb_sortcmd}" ${adb_srtopts} -u "${adb_tmpdir}/tmp.add.allowlist" >>"${file_name}"
[ "${adb_safesearch}" = "1" ] && "${adb_catcmd}" "${adb_tmpdir}/tmp.safesearch."* 2>/dev/null >>"${file_name}"
if [ "${adb_dnsdeny}" != "0" ]; then
eval "${adb_dnsdeny}" "${adb_tmpdir}/${adb_dnsfile}" >>"${file_name}"
# main function for blocklist processing
#
f_main() {
- local src_tmpload src_tmpfile src_name src_rset src_url src_cat src_item src_list src_entries src_suffix src_rc entry cnt
+ local src_tmpload src_tmpfile src_name src_domain src_rset src_url src_cat src_item src_list src_entries src_suffix src_rc entry cnt
# allow- and blocklist preparation
#
adb_feed="${adb_feed/${src_name}/}"
continue
fi
+
+ # get feed information
+ #
json_get_var src_url "url" >/dev/null 2>&1
json_get_var src_rset "rule" >/dev/null 2>&1
json_select ..
continue
fi
+ # add domains of active feed URLs to the allowlist
+ #
+ src_domain="${src_url#*://}"
+ src_domain="${src_domain%%/*}"
+ if [ -n "${src_domain}" ] && [ "${adb_dnsallow}" != "0" ] && ! "${adb_grepcmd}" -qxF "${src_domain}" "${adb_tmpdir}/tmp.raw.allowlist"; then
+ printf "%s\n" "${src_domain}" >>"${adb_tmpdir}/tmp.raw.allowlist"
+ eval "${adb_dnsallow}" "${adb_tmpdir}/tmp.raw.allowlist" >>"${adb_tmpdir}/tmp.add.allowlist"
+ fi
+
# download queue processing
#
src_cat=""
json_get_keys details >/dev/null 2>&1
json_get_var rc "rc" >/dev/null 2>&1
json_get_var domain "domain" >/dev/null 2>&1
- if [ "${rc}" = "NX" ] && ! "${adb_catcmd}" "${map_jsn}" 2>/dev/null | "${adb_grepcmd}" -q "${domain}"; then
+ if [ "${rc}" = "NX" ] && ! "${adb_catcmd}" "${map_jsn}" 2>/dev/null | "${adb_grepcmd}" -qxF "${domain}"; then
(
"${adb_fetchcmd}" ${adb_geoparm} "${adb_geourl}/${domain}" 2>/dev/null |
"${adb_awkcmd}" -v feed="${domain}" '{printf ",{\"%s\": %s}\n",feed,$0}' >>"${map_jsn}"