mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-12-01 02:23:21 +00:00
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:
parent
bf58ce8db2
commit
138dcde7b7
1 changed files with 25 additions and 45 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue