Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pi-hole/pi-hole.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'advanced/Scripts/list.sh')
-rwxr-xr-xadvanced/Scripts/list.sh160
1 files changed, 98 insertions, 62 deletions
diff --git a/advanced/Scripts/list.sh b/advanced/Scripts/list.sh
index 308e1f5e..72250afd 100755
--- a/advanced/Scripts/list.sh
+++ b/advanced/Scripts/list.sh
@@ -19,11 +19,14 @@ addmode=true
verbose=true
domList=()
-domToRemoveList=()
listMain=""
listAlt=""
+colfile="/opt/pihole/COL_TABLE"
+source ${colfile}
+
+
helpFunc() {
if [[ "${listMain}" == "${whitelist}" ]]; then
param="w"
@@ -45,7 +48,8 @@ Options:
-nr, --noreload Update ${type}list without refreshing dnsmasq
-q, --quiet Make output less verbose
-h, --help Show this help dialog
- -l, --list Display all your ${type}listed domains"
+ -l, --list Display all your ${type}listed domains
+ --nuke Removes all entries in a list"
exit 0
}
@@ -58,15 +62,19 @@ EscapeRegexp() {
}
HandleOther() {
- # First, convert everything to lowercase
- domain=$(sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" <<< "$1")
+ # Convert to lowercase
+ domain="${1,,}"
# Check validity of domain
- validDomain=$(echo "${domain}" | perl -lne 'print if /(?!.*[^a-z0-9-\.].*)^((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9-]+\.)*[a-z]{2,63}/')
- if [[ -z "${validDomain}" ]]; then
- echo "::: $1 is not a valid argument or domain name"
- else
+ if [[ "${#domain}" -le 253 ]]; then
+ validDomain=$(grep -P "^((-|_)*[a-z\d]((-|_)*[a-z\d])*(-|_)*)(\.(-|_)*([a-z\d]((-|_)*[a-z\d])*))*$" <<< "${domain}") # Valid chars check
+ validDomain=$(grep -P "^[^\.]{1,63}(\.[^\.]{1,63})*$" <<< "${validDomain}") # Length of each label
+ fi
+
+ if [[ -n "${validDomain}" ]]; then
domList=("${domList[@]}" ${validDomain})
+ else
+ echo -e " ${CROSS} ${domain} is not a valid argument or domain name!"
fi
}
@@ -94,7 +102,13 @@ AddDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
+ [[ "${list}" == "${whitelist}" ]] && listname="whitelist"
+ [[ "${list}" == "${blacklist}" ]] && listname="blacklist"
+ [[ "${list}" == "${wildcardlist}" ]] && listname="wildcard blacklist"
+
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
+ [[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
+ [[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
bool=true
# Is the domain in the list we want to add it to?
grep -Ex -q "${domain}" "${list}" > /dev/null 2>&1 || bool=false
@@ -102,101 +116,122 @@ AddDomain() {
if [[ "${bool}" == false ]]; then
# Domain not found in the whitelist file, add it!
if [[ "${verbose}" == true ]]; then
- echo "::: Adding $1 to $list..."
+ echo -e " ${INFO} Adding $1 to $listname..."
fi
reload=true
# Add it to the list we want to add it to
echo "$1" >> "${list}"
else
if [[ "${verbose}" == true ]]; then
- echo "::: ${1} already exists in ${list}, no need to add!"
+ echo -e " ${INFO} ${1} already exists in ${listname}, no need to add!"
fi
fi
elif [[ "${list}" == "${wildcardlist}" ]]; then
source "${piholeDir}/setupVars.conf"
- # Remove the /* from the end of the IPv4addr.
+ # Remove the /* from the end of the IP addresses
IPV4_ADDRESS=${IPV4_ADDRESS%/*}
- IPV6_ADDRESS=${IPV6_ADDRESS}
-
+ IPV6_ADDRESS=${IPV6_ADDRESS%/*}
+ [[ -z "${type}" ]] && type="--wildcard-only"
bool=true
# Is the domain in the list?
grep -e "address=\/${domain}\/" "${wildcardlist}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == false ]]; then
if [[ "${verbose}" == true ]]; then
- echo "::: Adding $1 to wildcard blacklist..."
+ echo -e " ${INFO} Adding $1 to wildcard blacklist..."
fi
- reload=true
+ reload="restart"
echo "address=/$1/${IPV4_ADDRESS}" >> "${wildcardlist}"
if [[ "${#IPV6_ADDRESS}" > 0 ]]; then
echo "address=/$1/${IPV6_ADDRESS}" >> "${wildcardlist}"
fi
else
if [[ "${verbose}" == true ]]; then
- echo "::: ${1} already exists in wildcard blacklist, no need to add!"
+ echo -e " ${INFO} ${1} already exists in wildcard blacklist, no need to add!"
fi
fi
fi
}
RemoveDomain() {
- list="$2"
- domain=$(EscapeRegexp "$1")
-
- if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
- bool=true
- # Is it in the list? Logic follows that if its whitelisted it should not be blacklisted and vice versa
- grep -Ex -q "${domain}" "${list}" > /dev/null 2>&1 || bool=false
- if [[ "${bool}" == true ]]; then
- # Remove it from the other one
- echo "::: Removing $1 from $list..."
- # /I flag: search case-insensitive
- sed -i "/${domain}/Id" "${list}"
- reload=true
- else
- if [[ "${verbose}" == true ]]; then
- echo "::: ${1} does not exist in ${list}, no need to remove!"
- fi
+ list="$2"
+ domain=$(EscapeRegexp "$1")
+
+ [[ "${list}" == "${whitelist}" ]] && listname="whitelist"
+ [[ "${list}" == "${blacklist}" ]] && listname="blacklist"
+ [[ "${list}" == "${wildcardlist}" ]] && listname="wildcard blacklist"
+
+ if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
+ bool=true
+ [[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
+ [[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
+ # Is it in the list? Logic follows that if its whitelisted it should not be blacklisted and vice versa
+ grep -Ex -q "${domain}" "${list}" > /dev/null 2>&1 || bool=false
+ if [[ "${bool}" == true ]]; then
+ # Remove it from the other one
+ echo -e " ${INFO} Removing $1 from $listname..."
+ # /I flag: search case-insensitive
+ sed -i "/${domain}/Id" "${list}"
+ reload=true
+ else
+ if [[ "${verbose}" == true ]]; then
+ echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
fi
- elif [[ "${list}" == "${wildcardlist}" ]]; then
- bool=true
- # Is it in the list?
- grep -e "address=\/${domain}\/" "${wildcardlist}" > /dev/null 2>&1 || bool=false
- if [[ "${bool}" == true ]]; then
- # Remove it from the other one
- echo "::: Removing $1 from $list..."
- # /I flag: search case-insensitive
- sed -i "/address=\/${domain}/Id" "${list}"
- reload=true
- else
- if [[ "${verbose}" == true ]]; then
- echo "::: ${1} does not exist in ${list}, no need to remove!"
- fi
+ fi
+ elif [[ "${list}" == "${wildcardlist}" ]]; then
+ [[ -z "${type}" ]] && type="--wildcard-only"
+ bool=true
+ # Is it in the list?
+ grep -e "address=\/${domain}\/" "${wildcardlist}" > /dev/null 2>&1 || bool=false
+ if [[ "${bool}" == true ]]; then
+ # Remove it from the other one
+ echo -e " ${INFO} Removing $1 from $listname..."
+ # /I flag: search case-insensitive
+ sed -i "/address=\/${domain}/Id" "${list}"
+ reload=true
+ else
+ if [[ "${verbose}" == true ]]; then
+ echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
fi
fi
+ fi
}
+# Update Gravity
Reload() {
- # Reload hosts file
- pihole -g -sd
+ echo ""
+ pihole -g --skip-download "${type:-}"
}
Displaylist() {
- if [[ "${listMain}" == "${whitelist}" ]]; then
- string="gravity resistant domains"
+ if [[ -f ${listMain} ]]; then
+ if [[ "${listMain}" == "${whitelist}" ]]; then
+ string="gravity resistant domains"
+ else
+ string="domains caught in the sinkhole"
+ fi
+ verbose=false
+ echo -e "Displaying $string:\n"
+ count=1
+ while IFS= read -r RD; do
+ echo " ${count}: ${RD}"
+ count=$((count+1))
+ done < "${listMain}"
else
- string="domains caught in the sinkhole"
+ echo -e " ${COL_LIGHT_RED}${listMain} does not exist!${COL_NC}"
fi
- verbose=false
- echo -e "Displaying $string:\n"
- count=1
- while IFS= read -r RD; do
- echo "${count}: ${RD}"
- count=$((count+1))
- done < "${listMain}"
exit 0;
}
+NukeList() {
+ if [[ -f "${listMain}" ]]; then
+ # Back up original list
+ cp "${listMain}" "${listMain}.bck~"
+ # Empty out file
+ echo "" > "${listMain}"
+ fi
+}
+
for var in "$@"; do
case "${var}" in
"-w" | "whitelist" ) listMain="${whitelist}"; listAlt="${blacklist}";;
@@ -204,10 +239,10 @@ for var in "$@"; do
"-wild" | "wildcard" ) listMain="${wildcardlist}";;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
- "-f" | "--force" ) force=true;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) Displaylist;;
+ "--nuke" ) NukeList;;
* ) HandleOther "${var}";;
esac
done
@@ -220,6 +255,7 @@ fi
PoplistFile
-if ${reload}; then
- Reload
+if [[ "${reload}" != false ]]; then
+ # Ensure that "restart" is used for Wildcard updates
+ Reload "${reload}"
fi