diff --git a/advanced/Scripts/list.sh b/advanced/Scripts/list.sh index 87e4ab44..c1d95aae 100755 --- a/advanced/Scripts/list.sh +++ b/advanced/Scripts/list.sh @@ -13,6 +13,7 @@ basename=pihole piholeDir=/etc/"${basename}" whitelist="${piholeDir}"/whitelist.txt blacklist="${piholeDir}"/blacklist.txt + readonly regexlist="/etc/pihole/regex.list" reload=false addmode=true diff --git a/gravity.sh b/gravity.sh index 026cd4a4..b5694b76 100755 --- a/gravity.sh +++ b/gravity.sh @@ -73,6 +73,20 @@ if [[ -r "${piholeDir}/pihole.conf" ]]; then echo -e " ${COL_LIGHT_RED}Ignoring overrides specified within pihole.conf! ${COL_NC}" fi +# Determine if Pi-hole blocking is disabled +# If this is the case, we want to update +# gravity.list.bck and black.list.bck instead of +# gravity.list and black.list +detect_pihole_blocking_status() { + if [[ "${BLOCKING_ENABLED}" == false ]]; then + echo -e " ${INFO} Pi-hole blocking is disabled" + adList="${adList}.bck" + blackList="${blackList}.bck" + else + echo -e " ${INFO} Pi-hole blocking is enabled" + fi +} + # Determine if DNS resolution is available before proceeding gravity_CheckDNSResolutionAvailable() { local lookupDomain="pi.hole" @@ -621,6 +635,8 @@ if [[ "${forceDelete:-}" == true ]]; then echo -e "${OVER} ${TICK} ${str}" fi +detect_pihole_blocking_status + # Determine which functions to run if [[ "${skipDownload}" == false ]]; then # Gravity needs to download blocklists diff --git a/pihole b/pihole index 0f584b15..4f76c98d 100755 --- a/pihole +++ b/pihole @@ -10,7 +10,9 @@ # Please see LICENSE file for your rights under this license. readonly PI_HOLE_SCRIPT_DIR="/opt/pihole" -readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf" +readonly gravitylist="/etc/pihole/gravity.list" +readonly blacklist="/etc/pihole/black.list" +readonly setupVars="/etc/pihole/setupVars.conf" readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE" source "${colfile}" @@ -146,10 +148,13 @@ Time: elif [[ "${1}" == "0" ]]; then # Disable Pi-hole - sed -i 's/^addn-hosts=\/etc\/pihole\/gravity.list/#addn-hosts=\/etc\/pihole\/gravity.list/' /etc/dnsmasq.d/01-pihole.conf - sed -i 's/^addn-hosts=\/etc\/pihole\/black.list/#addn-hosts=\/etc\/pihole\/black.list/' /etc/dnsmasq.d/01-pihole.conf - if [[ -e "$wildcardlist" ]]; then - mv "$wildcardlist" "/etc/pihole/wildcard.list" + if [[ -e "${gravitylist}" ]]; then + mv "${gravitylist}" "${gravitylist}.bck" + echo "" > "${gravitylist}" + fi + if [[ -e "${blacklist}" ]]; then + mv "${blacklist}" "${blacklist}.bck" + echo "" > "${blacklist}" fi if [[ $# > 1 ]]; then local error=false @@ -187,19 +192,25 @@ Time: fi local str="Pi-hole Disabled" + sed -i "/BLOCKING_ENABLED=/d" "${setupVars}" + echo "BLOCKING_ENABLED=false" >> "${setupVars}" fi else # Enable Pi-hole echo -e " ${INFO} Enabling blocking" local str="Pi-hole Enabled" - sed -i 's/^#addn-hosts/addn-hosts/' /etc/dnsmasq.d/01-pihole.conf - if [[ -e "/etc/pihole/wildcard.list" ]]; then - mv "/etc/pihole/wildcard.list" "$wildcardlist" + if [[ -e "${gravitylist}.bck" ]]; then + mv "${gravitylist}.bck" "${gravitylist}" + fi + if [[ -e "${blacklist}.bck" ]]; then + mv "${blacklist}.bck" "${blacklist}" fi + sed -i "/BLOCKING_ENABLED=/d" "${setupVars}" + echo "BLOCKING_ENABLED=true" >> "${setupVars}" fi - restartDNS + restartDNS reload echo -e "${OVER} ${TICK} ${str}" } @@ -242,8 +253,6 @@ Options: } statusFunc() { - local addnConfigs - # Determine if service is running on port 53 (Cr: https://superuser.com/a/806331) if (echo > /dev/tcp/127.0.0.1/53) >/dev/null 2>&1; then if [[ "${1}" != "web" ]]; then @@ -257,16 +266,14 @@ statusFunc() { return 0 fi - # Determine if Pi-hole's addn-hosts configs are commented out - addnConfigs=$(grep -i "addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf) - - if [[ "${addnConfigs}" =~ "#" ]]; then + # Determine if Pi-hole's blocking is enabled + if grep -q "BLOCKING_ENABLED=false" /etc/pihole/setupVars.conf; then # A config is commented out case "${1}" in "web") echo 0;; *) echo -e " ${CROSS} Pi-hole blocking is Disabled";; esac - elif [[ -n "${addnConfigs}" ]]; then + elif grep -q "BLOCKING_ENABLED=true" /etc/pihole/setupVars.conf; then # Configs are set case "${1}" in "web") echo 1;; @@ -276,11 +283,10 @@ statusFunc() { # No configs were found case "${1}" in "web") echo 99;; - *) echo -e " ${INFO} No hosts file linked to dnsmasq, adding it in enabled state";; + *) echo -e " ${INFO} Pi-hole blocking will be enabled";; esac - # Add addn-host= to dnsmasq - echo "addn-hosts=/etc/pihole/gravity.list" >> /etc/dnsmasq.d/01-pihole.conf - restartDNS + # Enable blocking + pihole enable fi }