Rewrite of whitelist.sh to take into account new whitelisting method. Checks existing whitelist.txt for domain passed in argument, if it doesn't exist it will run gravity.sh to reload the hosts file.

This commit is contained in:
Promofaux 2016-01-14 22:23:15 +00:00
parent bf58ce8db2
commit 138dcde7b7

View file

@ -7,10 +7,11 @@
# the Free Software Foundation, either version 2 of the License, or # the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version. # (at your option) any later version.
whitelist=/etc/pihole/whitelist.txt whiteList=/etc/pihole/whitelist.txt
adList=/etc/pihole/gravity.list adList=/etc/pihole/gravity.list
if [[ ! -f $whitelist ]];then latentWhitelist=/etc/pihole/latentWhitelist.txt
touch $whitelist if [[ ! -f $whiteList ]];then
touch $whiteList
fi fi
if [[ $# = 0 ]]; then if [[ $# = 0 ]]; then
@ -18,50 +19,29 @@ if [[ $# = 0 ]]; then
echo "Usage: whitelist.sh domain1 [domain2 ...]" echo "Usage: whitelist.sh domain1 [domain2 ...]"
fi fi
combopattern="" latentPattern=""
boolA=false
# For each argument passed to this script boolB=false
for var in "$@" for var in "$@"
do do
echo "Whitelisting $var..." bool=false;
echo "Whitelisting $var..."
# Construct basic pattern to match domain name. #add to whitelist.txt if it is not already there
basicpattern=$(echo $var | awk -F '[# \t]' 'NF>0&&$1!="" {print ""$1""}' | sed 's/\./\\./g') grep -Ex -q "$var" $whiteList || boolB=true
if $boolB; then
if [[ "$basicpattern" != "" ]]; then echo $var >> $whiteList
# Add to the combination pattern that will be used below #add to latentwhitelist.txt. Double-check it's not already there
if [[ "$combopattern" != "" ]]; then combopattern="$combopattern|"; fi latentPattern=$(echo $var | sed 's/\./\\./g')
combopattern="$combopattern$basicpattern" grep -Ex -q "$latentPattern" $whiteList || echo $latentPattern >> $latentWhitelist
boolA=true;
# Also add the domain to the whitelist but only if it's not already present else
grep -E -q "^$basicpattern$" $whitelist \ echo "$var Already in whitelist.txt"
|| echo "$var" >> $whitelist fi
fi
done done
# Now report on and remove matched domains if $boolA; then
if [[ "$combopattern" != "" ]]; then echo "New domains added to whitelist. Running gravity.sh"
echo "Modifying hosts file..." /usr/local/bin/gravity.sh
else
# Construct pattern to match entry in hosts file. echo "No need to update Hosts list, given domains already in whitelist"
# 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
sed -r -n 's/'"$pattern"'/ Removed: \3/p' $adList
sed -r -i '/'"$pattern"'/d' $adList
echo "** $# domain(s) whitelisted."
# Reload hosts file
echo "** Refresh lists in dnsmasq..."
dnsmasqPid=$(pidof dnsmasq)
if [[ $dnsmasqPid ]]; then
# service already running - reload config
sudo kill -HUP $dnsmasqPid
else
# service not running, start it up
sudo service dnsmasq start
fi
fi fi