2015-12-06 13:55:50 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
# (c) 2015 by Jacob Salmela
|
|
|
|
# This file is part of Pi-hole.
|
|
|
|
#
|
|
|
|
# Pi-hole is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation, either version 2 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
|
2015-11-28 00:38:33 +00:00
|
|
|
whitelist=/etc/pihole/whitelist.txt
|
|
|
|
adList=/etc/pihole/gravity.list
|
|
|
|
if [[ ! -f $whitelist ]];then
|
|
|
|
touch $whitelist
|
2015-11-28 00:29:44 +00:00
|
|
|
fi
|
|
|
|
|
2015-11-28 00:34:02 +00:00
|
|
|
if [[ $# = 0 ]]; then
|
2015-10-25 23:53:20 +00:00
|
|
|
echo "Immediately whitelists one or more domains."
|
|
|
|
echo "Usage: whitelist.sh domain1 [domain2 ...]"
|
|
|
|
fi
|
|
|
|
|
|
|
|
combopattern=""
|
|
|
|
|
2015-07-18 14:39:18 +00:00
|
|
|
# For each argument passed to this script
|
|
|
|
for var in "$@"
|
|
|
|
do
|
2015-10-25 23:53:20 +00:00
|
|
|
echo "Whitelisting $var..."
|
|
|
|
|
|
|
|
# Construct basic pattern to match domain name.
|
|
|
|
basicpattern=$(echo $var | awk -F '[# \t]' 'NF>0&&$1!="" {print ""$1""}' | sed 's/\./\\./g')
|
|
|
|
|
2015-11-28 00:34:02 +00:00
|
|
|
if [[ "$basicpattern" != "" ]]; then
|
2015-10-25 23:53:20 +00:00
|
|
|
# Add to the combination pattern that will be used below
|
2015-11-28 00:34:02 +00:00
|
|
|
if [[ "$combopattern" != "" ]]; then combopattern="$combopattern|"; fi
|
2015-10-25 23:53:20 +00:00
|
|
|
combopattern="$combopattern$basicpattern"
|
|
|
|
|
|
|
|
# Also add the domain to the whitelist but only if it's not already present
|
2015-11-28 00:38:33 +00:00
|
|
|
grep -E -q "^$basicpattern$" $whitelist \
|
|
|
|
|| echo "$var" >> $whitelist
|
2015-10-25 23:53:20 +00:00
|
|
|
fi
|
2015-07-18 14:39:18 +00:00
|
|
|
done
|
2015-10-25 23:53:20 +00:00
|
|
|
|
|
|
|
# Now report on and remove matched domains
|
2015-11-28 00:34:02 +00:00
|
|
|
if [[ "$combopattern" != "" ]]; then
|
2015-10-25 23:53:20 +00:00
|
|
|
echo "Modifying hosts file..."
|
2015-11-28 00:29:44 +00:00
|
|
|
|
2015-10-25 23:53:20 +00:00
|
|
|
# Construct pattern to match entry in hosts file.
|
|
|
|
# This consists of one or more IP addresses followed by the domain name.
|
|
|
|
pattern=$(echo $combopattern | awk -F '[# \t]' '{printf "%s", "^(([0-9]+\.){3}[0-9]+ +)+("$1")$"}')
|
|
|
|
|
|
|
|
# Output what will be removed and then actually remove
|
2015-11-28 00:38:33 +00:00
|
|
|
sed -r -n 's/'"$pattern"'/ Removed: \3/p' $adList
|
|
|
|
sed -r -i '/'"$pattern"'/d' $adList
|
2015-10-25 23:53:20 +00:00
|
|
|
|
|
|
|
echo "** $# domain(s) whitelisted."
|
|
|
|
# Force dnsmasq to reload /etc/pihole/gravity.list
|
|
|
|
kill -HUP $(pidof dnsmasq)
|
|
|
|
fi
|