Merge pull request #2891 from niklasea/development

Restore 'pihole -q' hosts format support and improve matching in edge cases
This commit is contained in:
Dan Schaper 2019-08-30 20:56:52 -07:00 committed by GitHub
commit b9fed8fca6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -54,7 +54,7 @@ scanList(){
# /dev/null forces filename to be printed when only one list has been generated # /dev/null forces filename to be printed when only one list has been generated
# shellcheck disable=SC2086 # shellcheck disable=SC2086
case "${type}" in case "${type}" in
"exact" ) grep -i -E -l "(^|(?<!#)\\s)${domain}($|\\s|#)" ${lists} /dev/null 2>/dev/null;; "exact" ) grep -i -E "(^|\\s)${domain}($|\\s|#)" ${lists} /dev/null 2>/dev/null;;
"wc" ) grep -i -o -m 1 "/${domain}/" ${lists} 2>/dev/null;; "wc" ) grep -i -o -m 1 "/${domain}/" ${lists} 2>/dev/null;;
* ) grep -i "${domain}" ${lists} /dev/null 2>/dev/null;; * ) grep -i "${domain}" ${lists} /dev/null 2>/dev/null;;
esac esac
@ -170,19 +170,21 @@ elif [[ -z "${all}" ]] && [[ "${#results[*]}" -ge 100 ]]; then
exit 0 exit 0
fi fi
# Remove unwanted content from non-exact $results # Remove unwanted content from $results
if [[ -z "${exact}" ]]; then # Each line in $results is formatted as such: [fileName]:[line]
# Delete lines starting with # # 1. Delete lines starting with #
# Remove comments after domain # 2. Remove comments after domain
# Remove hosts format IP address # 3. Remove hosts format IP address
# 4. Remove any lines that no longer contain the queried domain name (in case the matched domain name was in a comment)
esc_domain="${domainQuery//./\\.}"
mapfile -t results <<< "$(IFS=$'\n'; sed \ mapfile -t results <<< "$(IFS=$'\n'; sed \
-e "/:#/d" \ -e "/:#/d" \
-e "s/[ \\t]#.*//g" \ -e "s/[ \\t]#.*//g" \
-e "s/:.*[ \\t]/:/g" \ -e "s/:.*[ \\t]/:/g" \
-e "/${esc_domain}/!d" \
<<< "${results[*]}")" <<< "${results[*]}")"
# Exit if result was in a comment # Exit if result was in a comment
[[ -z "${results[*]}" ]] && exit 0 [[ -z "${results[*]}" ]] && exit 0
fi
# Get adlist file content as array # Get adlist file content as array
if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then