diff --git a/pihole b/pihole index 6d875d85..61ef0e20 100755 --- a/pihole +++ b/pihole @@ -1,4 +1,5 @@ #!/bin/bash + # Pi-hole: A black hole for Internet advertisements # (c) 2017 Pi-hole, LLC (https://pi-hole.net) # Network-wide ad blocking via your own hardware. @@ -10,6 +11,9 @@ readonly PI_HOLE_SCRIPT_DIR="/opt/pihole" readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf" +readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE" + +source ${colfile} colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE" source "${colfile}" @@ -482,41 +486,43 @@ Options: echo -e "${OVER} ${TICK} ${str}" } -piholeStatus() { - if [[ "$(netstat -plnt | grep -c ':53 ')" -gt "0" ]]; then +statusFunc() { + local addnConfigs + + # Determine if service is running on port 53 (Cr: https://superuser.com/a/806331) + if (echo > /dev/tcp/localhost/53) >/dev/null 2>&1; then if [[ "${1}" != "web" ]]; then echo -e " ${TICK} DNS service is running" fi else - if [[ "${1}" == "web" ]]; then - echo "-1"; - else - echo -e " ${CROSS} DNS service is NOT running" - fi - return + case "${1}" in + "web") echo "-1";; + *) echo -e " ${CROSS} DNS service is NOT running";; + esac + return 0 fi - if [[ "$(grep -i "^#addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf)" ]]; then - # List is commented out - if [[ "${1}" == "web" ]]; then - echo 0; - else - echo -e " ${CROSS} Pi-hole blocking is Disabled"; - fi - elif [[ "$(grep -i "^addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf)" ]]; then - # List set - if [[ "${1}" == "web" ]]; then - echo 1; - else - echo -e " ${TICK} Pi-hole blocking is Enabled"; - 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 + # A config is commented out + case "${1}" in + "web") echo 0;; + *) echo -e " ${CROSS} Pi-hole blocking is Disabled";; + esac + elif [[ -n "${addnConfigs}" ]]; then + # Configs are set + case "${1}" in + "web") echo 1;; + *) echo -e " ${TICK} Pi-hole blocking is Enabled";; + esac else - # Addn-host not found - if [[ "${1}" == "web" ]]; then - echo 99 - else - echo -e " ${INFO} No hosts file linked to dnsmasq, adding it in enabled state" - fi + # No configs were found + case "${1}" in + "web") echo 99;; + *) echo -e " ${INFO} No hosts file linked to dnsmasq, adding it in enabled state";; + esac # Add addn-host= to dnsmasq echo "addn-hosts=/etc/pihole/gravity.list" >> /etc/dnsmasq.d/01-pihole.conf restartDNS @@ -562,7 +568,7 @@ tricorderFunc() { exit 1 fi - if ! timeout 2 nc -z tricorder.pi-hole.net 9998 &> /dev/null; then + if ! (echo > /dev/tcp/tricorder.pi-hole.net/9998) >/dev/null 2>&1; then echo -e " ${CROSS} Unable to connect to Pi-hole's Tricorder server" exit 1 fi @@ -652,8 +658,8 @@ case "${1}" in "uninstall" ) uninstallFunc;; "enable" ) piholeEnable 1;; "disable" ) piholeEnable 0 "$2";; - "status" ) piholeStatus "$2";; - "restartdns" ) restartDNS "$2";; + "status" ) statusFunc "$2";; + "restartdns" ) restartDNS;; "-a" | "admin" ) webpageFunc "$@";; "-t" | "tail" ) tailFunc;; "checkout" ) piholeCheckoutFunc "$@";;