From 0283a1ab74f7a404b96cf28fd055e5077f9b248d Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 17 Jun 2017 13:50:10 +0200 Subject: [PATCH 1/6] Introduce new file black.list for blacklist content --- advanced/01-pihole.conf | 1 + gravity.sh | 57 ++++++++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/advanced/01-pihole.conf b/advanced/01-pihole.conf index 1b157f88..79735c15 100644 --- a/advanced/01-pihole.conf +++ b/advanced/01-pihole.conf @@ -22,6 +22,7 @@ addn-hosts=/etc/pihole/gravity.list addn-hosts=/etc/pihole/local.list +addn-hosts=/etc/pihole/black.list domain-needed diff --git a/gravity.sh b/gravity.sh index a5231d5e..cb6768e4 100755 --- a/gravity.sh +++ b/gravity.sh @@ -54,6 +54,7 @@ IPV6_ADDRESS=${IPV6_ADDRESS} basename=pihole piholeDir=/etc/${basename} adList=${piholeDir}/gravity.list +blackList=${piholeDir}/black.list localList=${piholeDir}/local.list justDomainsExtension=domains matterAndLight=${basename}.0.matterandlight.txt @@ -236,7 +237,7 @@ gravity_Blacklist() { numBlacklisted=$(wc -l < "${blacklistFile}") plural=; [[ "$numBlacklisted" != "1" ]] && plural=s echo -n "::: Blacklisting $numBlacklisted domain${plural}..." - cat ${blacklistFile} >> ${piholeDir}/${eventHorizon} + cat "${blacklistFile}" > "${blackList}.tmp" echo " done!" else echo "::: Nothing to blacklist!" @@ -299,6 +300,23 @@ gravity_unique() { echo "::: $numberOf unique domains trapped in the event horizon." } +gravity_doHostFormat() { + # Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both. + if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then + # Both IPv4 and IPv6 + cat "${1}" | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> "${2}" + elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then + # Only IPv4 + cat "${1}" | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> "${2}" + elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then + # Only IPv6 + cat "${1}" | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> "${2}" + elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then + echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values" + exit 1 + fi +} + gravity_hostFormat() { # Format domain list as "192.168.x.x domain.com" echo -n "::: Formatting domains into a HOSTS file..." @@ -310,32 +328,23 @@ gravity_hostFormat() { else echo "::: Error: Unable to determine fully qualified domain name of host" fi - # Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both. - if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then - echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV6_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole\n${IPV6_ADDRESS} pi.hole" > ${localList} - # Both IPv4 and IPv6 - cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc} - - elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then - - echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole" > ${localList} - # Only IPv4 - cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc} - - elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then - - echo -e "${IPV6_ADDRESS} ${hostname}\n${IPV6_ADDRESS} pi.hole" > ${localList} - # Only IPv6 - cat ${piholeDir}/${eventHorizon} | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc} - - elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then - echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values" - exit 1 - fi + echo -e "${hostname}\npi.hole" > "${localList}.tmp" + # Copy the file over as /etc/pihole/local.list so dnsmasq can use it + gravity_doHostFormat "${localList}.tmp" "${localList}" + rm "${localList}.tmp" + echo "" > "${piholeDir}/${accretionDisc}" + gravity_doHostFormat "${piholeDir}/${eventHorizon}" "${piholeDir}/${accretionDisc}" # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it - cp ${piholeDir}/${accretionDisc} ${adList} + cp "${piholeDir}/${accretionDisc}" "${adList}" + rm "${piholeDir}/${accretionDisc}" + + echo -e "" > "${blackList}.tmp" + gravity_doHostFormat "${blackList}.tmp" "${blackList}" + # Copy the file over as /etc/pihole/black.list so dnsmasq can use it + cp "${blackList}.tmp" "${blackList}" + rm "${blackList}.tmp" echo " done!" } From 0a9c2341272d45dd8b161a24d23cc5fe36a50d0c Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 17 Jun 2017 13:57:27 +0200 Subject: [PATCH 2/6] Add "pihole -g -b" to *only* update black.list (saves a bunch of time when adding/changing only blacklisted files - won'tdownload lal lists, but only processes the blacklist and restars dnsmasq) --- gravity.sh | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/gravity.sh b/gravity.sh index cb6768e4..2b860183 100755 --- a/gravity.sh +++ b/gravity.sh @@ -317,9 +317,8 @@ gravity_doHostFormat() { fi } -gravity_hostFormat() { +gravity_hostFormatLocal() { # Format domain list as "192.168.x.x domain.com" - echo -n "::: Formatting domains into a HOSTS file..." if [[ -f /etc/hostname ]]; then hostname=$( "${piholeDir}/${accretionDisc}" gravity_doHostFormat "${piholeDir}/${eventHorizon}" "${piholeDir}/${accretionDisc}" # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it cp "${piholeDir}/${accretionDisc}" "${adList}" rm "${piholeDir}/${accretionDisc}" +} +gravity_hostFormatBlack() { + # Format domain list as "192.168.x.x domain.com" echo -e "" > "${blackList}.tmp" gravity_doHostFormat "${blackList}.tmp" "${blackList}" # Copy the file over as /etc/pihole/black.list so dnsmasq can use it cp "${blackList}.tmp" "${blackList}" rm "${blackList}.tmp" - echo " done!" } # blackbody - remove any remnant files from script processes @@ -386,11 +390,6 @@ gravity_advanced() { } gravity_reload() { - #Clear no longer needed files... - echo ":::" - echo -n "::: Cleaning up un-needed files..." - rm ${piholeDir}/pihole.*.txt - echo " done!" # Reload hosts file echo ":::" @@ -411,6 +410,7 @@ for var in "$@"; do "-f" | "--force" ) forceGrav=true;; "-h" | "--help" ) helpFunc;; "-sd" | "--skip-download" ) skipDownload=true;; + "-b" | "--blacklist-only" ) blackListOnly=true;; esac done @@ -420,22 +420,39 @@ if [[ "${forceGrav}" == true ]]; then echo " done!" fi -gravity_collapse -gravity_spinup -if [[ "${skipDownload}" == false ]]; then +if [[ ! "${blackListOnly}" == true ]]; then + gravity_collapse + gravity_spinup + if [[ "${skipDownload}" == false ]]; then gravity_Schwarzchild gravity_advanced -else + else echo "::: Using cached Event Horizon list..." numberOf=$(wc -l < ${piholeDir}/${preEventHorizon}) - echo "::: $numberOf unique domains trapped in the event horizon." + echo "::: $numberOf unique domains trapped in the event horizon." + fi + gravity_Whitelist fi -gravity_Whitelist gravity_Blacklist gravity_Wildcard -gravity_hostFormat +echo -n "::: Formatting domains into a HOSTS file..." +if [[ ! "${blackListOnly}" == true ]]; then + gravity_hostFormatLocal + gravity_hostFormatGravity +fi +gravity_hostFormatBlack +echo " done!" + gravity_blackbody +if [[ ! "${blackListOnly}" == true ]]; then + #Clear no longer needed files... + echo ":::" + echo -n "::: Cleaning up un-needed files..." + rm ${piholeDir}/pihole.*.txt + echo " done!" +fi + gravity_reload "${PIHOLE_COMMAND}" status From 92e691408f58e6ae8fd3eae7acfcfd0175245abc Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 17 Jun 2017 14:14:07 +0200 Subject: [PATCH 3/6] Remove useless cat --- gravity.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gravity.sh b/gravity.sh index 2b860183..558cbd18 100755 --- a/gravity.sh +++ b/gravity.sh @@ -304,13 +304,13 @@ gravity_doHostFormat() { # Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both. if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then # Both IPv4 and IPv6 - cat "${1}" | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> "${2}" + awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> "${2}" < "${1}" elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then # Only IPv4 - cat "${1}" | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> "${2}" + awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> "${2}" < "${1}" elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then # Only IPv6 - cat "${1}" | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> "${2}" + awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> "${2}" < "${1}" elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values" exit 1 @@ -330,6 +330,7 @@ gravity_hostFormatLocal() { echo -e "${hostname}\npi.hole" > "${localList}.tmp" # Copy the file over as /etc/pihole/local.list so dnsmasq can use it + rm "${localList}" gravity_doHostFormat "${localList}.tmp" "${localList}" rm "${localList}.tmp" } From 8bad56e89799f05d64d30d367361e9814b48f03c Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 17 Jun 2017 14:24:30 +0200 Subject: [PATCH 4/6] Improve displayed messages and overall logic --- gravity.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/gravity.sh b/gravity.sh index 558cbd18..f333b706 100755 --- a/gravity.sh +++ b/gravity.sh @@ -236,9 +236,7 @@ gravity_Blacklist() { if [[ -f "${blacklistFile}" ]]; then numBlacklisted=$(wc -l < "${blacklistFile}") plural=; [[ "$numBlacklisted" != "1" ]] && plural=s - echo -n "::: Blacklisting $numBlacklisted domain${plural}..." - cat "${blacklistFile}" > "${blackList}.tmp" - echo " done!" + echo "::: Exact blocked domain${plural}: $numBlacklisted" else echo "::: Nothing to blacklist!" fi @@ -345,12 +343,16 @@ gravity_hostFormatGravity() { } gravity_hostFormatBlack() { - # Format domain list as "192.168.x.x domain.com" - echo -e "" > "${blackList}.tmp" - gravity_doHostFormat "${blackList}.tmp" "${blackList}" - # Copy the file over as /etc/pihole/black.list so dnsmasq can use it - cp "${blackList}.tmp" "${blackList}" - rm "${blackList}.tmp" + if [[ -f "${blacklistFile}" ]]; then + numBlacklisted=$(wc -l < "${blacklistFile}") + # Format domain list as "192.168.x.x domain.com" + gravity_doHostFormat "${blacklistFile}" "${blackList}.tmp" + # Copy the file over as /etc/pihole/black.list so dnsmasq can use it + cp "${blackList}.tmp" "${blackList}" + rm "${blackList}.tmp" + else + echo "::: Nothing to blacklist!" + fi } # blackbody - remove any remnant files from script processes From e4cc5b3847314235f88953835fdbae2aea7adb70 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 17 Jun 2017 14:49:02 +0200 Subject: [PATCH 5/6] Disable black.list on "pihole disable" --- pihole | 1 + 1 file changed, 1 insertion(+) diff --git a/pihole b/pihole index f2bc7000..055d6bce 100755 --- a/pihole +++ b/pihole @@ -193,6 +193,7 @@ 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" fi From 05798fe07a363bc1b25e89396efec74b3abc6ace Mon Sep 17 00:00:00 2001 From: DL6ER Date: Mon, 19 Jun 2017 20:21:47 +0200 Subject: [PATCH 6/6] cp + rm === mv (well, almost) --- gravity.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gravity.sh b/gravity.sh index f333b706..285ce5c3 100755 --- a/gravity.sh +++ b/gravity.sh @@ -338,8 +338,7 @@ gravity_hostFormatGravity() { echo "" > "${piholeDir}/${accretionDisc}" gravity_doHostFormat "${piholeDir}/${eventHorizon}" "${piholeDir}/${accretionDisc}" # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it - cp "${piholeDir}/${accretionDisc}" "${adList}" - rm "${piholeDir}/${accretionDisc}" + mv "${piholeDir}/${accretionDisc}" "${adList}" } gravity_hostFormatBlack() { @@ -348,8 +347,7 @@ gravity_hostFormatBlack() { # Format domain list as "192.168.x.x domain.com" gravity_doHostFormat "${blacklistFile}" "${blackList}.tmp" # Copy the file over as /etc/pihole/black.list so dnsmasq can use it - cp "${blackList}.tmp" "${blackList}" - rm "${blackList}.tmp" + mv "${blackList}.tmp" "${blackList}" else echo "::: Nothing to blacklist!" fi