From 35dc4800e07135af1894ff817b8e51d2cf302932 Mon Sep 17 00:00:00 2001
From: mettacrawler
Date: Sun, 5 Nov 2017 15:28:44 -0500
Subject: [PATCH 001/158] basic-install.sh - no CIDR in ifcfg-*
Do not expect CIDR format IP addresses in /etc/sysconfig/network-scripts/ifcfg-* files as it is not a requirement.
Expect only:
IPADDR=10.10.10.10
Do not expect:
IPADDR=10.10.10.10/24
---
automated install/basic-install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 647661f8..e7c3f189 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -684,13 +684,13 @@ setStaticIPv4() {
elif [[ -f "/etc/sysconfig/network-scripts/ifcfg-${PIHOLE_INTERFACE}" ]];then
# If it exists,
IFCFG_FILE=/etc/sysconfig/network-scripts/ifcfg-${PIHOLE_INTERFACE}
+ IPADDR=$(echo "${IPV4_ADDRESS}" | cut -f1 -d/)
# check if the desired IP is already set
- if grep -q "${IPV4_ADDRESS}" "${IFCFG_FILE}"; then
+ if grep -q "${IPADDR}" "${IFCFG_FILE}"; then
echo -e " ${INFO} Static IP already configured"
# Otherwise,
else
# Put the IP in variables without the CIDR notation
- IPADDR=$(echo "${IPV4_ADDRESS}" | cut -f1 -d/)
CIDR=$(echo "${IPV4_ADDRESS}" | cut -f2 -d/)
# Backup existing interface configuration:
cp "${IFCFG_FILE}" "${IFCFG_FILE}".pihole.orig
From 2c8dcd86e570df2c1b1372b330b095d749f804d9 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Thu, 9 Nov 2017 20:47:15 +0000
Subject: [PATCH 002/158] remove package_check to avoid situations like #1760
Signed-off-by: Adam Warner
---
automated install/uninstall.sh | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh
index 2f4f4f9f..5628702f 100755
--- a/automated install/uninstall.sh
+++ b/automated install/uninstall.sh
@@ -62,19 +62,12 @@ if [ -x "$(command -v rpm)" ]; then
package_check() {
rpm -qa | grep ^$1- > /dev/null
}
- package_cleanup() {
- ${SUDO} ${PKG_MANAGER} -y autoremove
- }
elif [ -x "$(command -v apt-get)" ]; then
# Debian Family
PKG_REMOVE="${PKG_MANAGER} -y remove --purge"
package_check() {
dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed"
}
- package_cleanup() {
- ${SUDO} ${PKG_MANAGER} -y autoremove
- ${SUDO} ${PKG_MANAGER} -y autoclean
- }
else
echo -e " ${CROSS} OS distribution not supported"
exit 1
@@ -103,14 +96,9 @@ removeAndPurge() {
done
# Remove dnsmasq config files
- ${SUDO} rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null
+ ${SUDO} rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/*-pihole*.conf &> /dev/null
echo -e " ${TICK} Removing dnsmasq config files"
- # Take care of any additional package cleaning
- echo -ne " ${INFO} Removing & cleaning remaining dependencies..."
- package_cleanup &> /dev/null
- echo -e "${OVER} ${TICK} Removed & cleaned up remaining dependencies"
-
# Call removeNoPurge to remove Pi-hole specific files
removeNoPurge
}
From 36945a67d03d7ea28b706ed4b5b0b57b2ed0c93a Mon Sep 17 00:00:00 2001
From: Ryan Knapper
Date: Wed, 7 Feb 2018 17:04:10 -0500
Subject: [PATCH 003/158] Prevent redundant entries in to adlists.list
Grep ${args[3]} and only add if grep -c -eq 0
Signed-off-by: Ryan Knapper
---
advanced/Scripts/webpage.sh | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh
index d47eaff6..bd69d8ad 100755
--- a/advanced/Scripts/webpage.sh
+++ b/advanced/Scripts/webpage.sh
@@ -182,10 +182,6 @@ trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC68345710423
add_dnsmasq_setting "interface" "${PIHOLE_INTERFACE}"
fi
- if [[ "${CONDITIONAL_FORWARDING}" == true ]]; then
- add_dnsmasq_setting "server=/${CONDITIONAL_FORWARDING_DOMAIN}/${CONDITIONAL_FORWARDING_IP}"
- add_dnsmasq_setting "server=/${CONDITIONAL_FORWARDING_REVERSE}/${CONDITIONAL_FORWARDING_IP}"
- fi
}
@@ -215,17 +211,6 @@ SetDNSServers() {
else
change_setting "DNSSEC" "false"
fi
- if [[ "${args[6]}" == "conditional_forwarding" ]]; then
- change_setting "CONDITIONAL_FORWARDING" "true"
- change_setting "CONDITIONAL_FORWARDING_IP" "${args[7]}"
- change_setting "CONDITIONAL_FORWARDING_DOMAIN" "${args[8]}"
- change_setting "CONDITIONAL_FORWARDING_REVERSE" "${args[9]}"
- else
- change_setting "CONDITIONAL_FORWARDING" "false"
- delete_setting "CONDITIONAL_FORWARDING_IP"
- delete_setting "CONDITIONAL_FORWARDING_DOMAIN"
- delete_setting "CONDITIONAL_FORWARDING_REVERSE"
- fi
ProcessDNSSettings
@@ -269,7 +254,7 @@ ProcessDHCPSettings() {
fi
if [[ "${PIHOLE_DOMAIN}" == "" ]]; then
- PIHOLE_DOMAIN="local"
+ PIHOLE_DOMAIN="lan"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
fi
@@ -361,7 +346,9 @@ CustomizeAdLists() {
elif [[ "${args[2]}" == "disable" ]]; then
sed -i "\\@${args[3]}@s/^http/#http/g" "${list}"
elif [[ "${args[2]}" == "add" ]]; then
- echo "${args[3]}" >> ${list}
+ if [[ $(grep -c "${args[3]}" "${list}") -eq 0 ]] ; then
+ echo "${args[3]}" >> ${list}
+ fi
elif [[ "${args[2]}" == "del" ]]; then
var=$(echo "${args[3]}" | sed 's/\//\\\//g')
sed -i "/${var}/Id" "${list}"
From f2b3752f3dea7bd7e7e9ab6e06fba372bebeb454 Mon Sep 17 00:00:00 2001
From: Ryan Knapper
Date: Wed, 7 Feb 2018 17:08:55 -0500
Subject: [PATCH 004/158] lan to local
Reduced differences.
Signed-off-by: Ryan Knapper
---
advanced/Scripts/webpage.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh
index bd69d8ad..6e13d24e 100755
--- a/advanced/Scripts/webpage.sh
+++ b/advanced/Scripts/webpage.sh
@@ -254,7 +254,7 @@ ProcessDHCPSettings() {
fi
if [[ "${PIHOLE_DOMAIN}" == "" ]]; then
- PIHOLE_DOMAIN="lan"
+ PIHOLE_DOMAIN="local"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
fi
From c17d95bfeddface2fc74882d0f38a8197e844bfd Mon Sep 17 00:00:00 2001
From: Ryan Knapper
Date: Mon, 19 Feb 2018 10:22:28 -0500
Subject: [PATCH 005/158] Proper output for debug CPU detection
Inserted "log_write" to properly output CPU detection lines.
Signed-off-by: Ryan Knapper (ryanknapper@gmail.com>
---
advanced/Scripts/piholeDebug.sh | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh
index b668af94..5918ec1b 100755
--- a/advanced/Scripts/piholeDebug.sh
+++ b/advanced/Scripts/piholeDebug.sh
@@ -465,15 +465,15 @@ processor_check() {
else
# Check if the architecture is currently supported for FTL
case "${PROCESSOR}" in
- "amd64") "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
+ "amd64") log_write "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
;;
- "armv6l") "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
+ "armv6l") log_write "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
;;
- "armv6") "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
+ "armv6") log_write "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
;;
- "armv7l") "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
+ "armv7l") log_write "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
;;
- "aarch64") "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
+ "aarch64") log_write "${TICK} ${COL_GREEN}${PROCESSOR}${COL_NC}"
;;
# Otherwise, show the processor type
*) log_write "${INFO} ${PROCESSOR}";
From d4ac818a0b285672a7725bcf4b8ea75c0b13a229 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 21 Feb 2018 11:23:07 +0000
Subject: [PATCH 006/158] Specifty `LC_ALL=C` when dealing with sorted lists.
Signed-off-by: Adam Warner
---
gravity.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index ce2734fc..71849380 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -330,7 +330,7 @@ gravity_ParseFileIntoDomains() {
}' "${source}" > "${destination}.exceptionsFile.tmp"
# Remove exceptions
- comm -23 "${destination}" <(sort "${destination}.exceptionsFile.tmp") > "${source}"
+ LC_ALL=C comm -23 "${destination}" <(sort "${destination}.exceptionsFile.tmp") > "${source}"
mv "${source}" "${destination}"
fi
@@ -409,7 +409,7 @@ gravity_SortAndFilterConsolidatedList() {
str="Removing duplicate domains"
echo -ne " ${INFO} ${str}..."
- sort -u "${piholeDir}/${parsedMatter}" > "${piholeDir}/${preEventHorizon}"
+ LC_ALL=C sort -u "${piholeDir}/${parsedMatter}" > "${piholeDir}/${preEventHorizon}"
echo -e "${OVER} ${TICK} ${str}"
# Format $preEventHorizon line total as currency
@@ -431,7 +431,7 @@ gravity_Whitelist() {
echo -ne " ${INFO} ${str}..."
# Print everything from preEventHorizon into whitelistMatter EXCEPT domains in $whitelistFile
- comm -23 "${piholeDir}/${preEventHorizon}" <(sort "${whitelistFile}") > "${piholeDir}/${whitelistMatter}"
+ LC_ALL=C comm -23 "${piholeDir}/${preEventHorizon}" <(sort "${whitelistFile}") > "${piholeDir}/${whitelistMatter}"
echo -e "${OVER} ${INFO} ${str}"
}
From 6b4685b33308f426ecd7c2b591b0713132a32525 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 21 Feb 2018 11:33:29 +0000
Subject: [PATCH 007/158] much more elegant to export LC_ALL at the beginning
of the script!
Signed-off-by: Adam Warner
---
gravity.sh | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index 71849380..cfc7566e 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -11,6 +11,8 @@
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
+export LC_ALL=C
+
coltable="/opt/pihole/COL_TABLE"
source "${coltable}"
@@ -330,7 +332,7 @@ gravity_ParseFileIntoDomains() {
}' "${source}" > "${destination}.exceptionsFile.tmp"
# Remove exceptions
- LC_ALL=C comm -23 "${destination}" <(sort "${destination}.exceptionsFile.tmp") > "${source}"
+ comm -23 "${destination}" <(sort "${destination}.exceptionsFile.tmp") > "${source}"
mv "${source}" "${destination}"
fi
@@ -409,7 +411,7 @@ gravity_SortAndFilterConsolidatedList() {
str="Removing duplicate domains"
echo -ne " ${INFO} ${str}..."
- LC_ALL=C sort -u "${piholeDir}/${parsedMatter}" > "${piholeDir}/${preEventHorizon}"
+ sort -u "${piholeDir}/${parsedMatter}" > "${piholeDir}/${preEventHorizon}"
echo -e "${OVER} ${TICK} ${str}"
# Format $preEventHorizon line total as currency
@@ -431,7 +433,7 @@ gravity_Whitelist() {
echo -ne " ${INFO} ${str}..."
# Print everything from preEventHorizon into whitelistMatter EXCEPT domains in $whitelistFile
- LC_ALL=C comm -23 "${piholeDir}/${preEventHorizon}" <(sort "${whitelistFile}") > "${piholeDir}/${whitelistMatter}"
+ comm -23 "${piholeDir}/${preEventHorizon}" <(sort "${whitelistFile}") > "${piholeDir}/${whitelistMatter}"
echo -e "${OVER} ${INFO} ${str}"
}
From e61d8e4fb84130560f28021b484a9d4350e38268 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Thu, 22 Feb 2018 14:45:31 +0000
Subject: [PATCH 008/158] adlists.default no longer used. No need to reference
it. Use --force switch of gravity to force the cache refresh
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 16 +---------------
1 file changed, 1 insertion(+), 15 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index b694b527..c5eb17e4 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1378,22 +1378,8 @@ installCron() {
# Gravity is a very important script as it aggregates all of the domains into a single HOSTS formatted list,
# which is what Pi-hole needs to begin blocking ads
runGravity() {
- echo ""
- echo -e " ${INFO} Preparing to run gravity.sh to refresh hosts..."
- # If cached lists exist,
- if ls /etc/pihole/list* 1> /dev/null 2>&1; then
- echo -e " ${INFO} Cleaning up previous install (preserving whitelist/blacklist)"
- # remove them
- rm /etc/pihole/list.*
- fi
- # If the default ad lists file exists,
- if [[ ! -e /etc/pihole/adlists.default ]]; then
- # copy it over from the local repo
- cp ${PI_HOLE_LOCAL_REPO}/adlists.default /etc/pihole/adlists.default
- fi
- echo -e " ${INFO} Running gravity.sh"
# Run gravity in the current shell
- { /opt/pihole/gravity.sh; }
+ { /opt/pihole/gravity.sh --force; }
}
# Check if the pihole user exists and create if it does not
From 4606693e62a16a40a5bd342ec237859e0d39dac3 Mon Sep 17 00:00:00 2001
From: Dan Schaper
Date: Thu, 22 Feb 2018 20:13:38 -0800
Subject: [PATCH 009/158] Use pushd/popd and create random temporary directory
to prevent potential backdoor binary injection.
Signed-off-by: Dan Schaper
---
automated install/basic-install.sh | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index b694b527..bdf99ee3 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1734,17 +1734,14 @@ clone_or_update_repos() {
fi
}
-# Download and install FTL binary
+# Download FTL binary to random temp directory and install FTL binary
FTLinstall() {
# Local, named variables
local binary="${1}"
local latesttag
- local orig_dir
local str="Downloading and Installing FTL"
echo -ne " ${INFO} ${str}..."
- # Get the current working directory
- orig_dir="${PWD}"
# Find the latest version tag for FTL
latesttag=$(curl -sI https://github.com/pi-hole/FTL/releases/latest | grep "Location" | awk -F '/' '{print $NF}')
# Tags should always start with v, check for that.
@@ -1754,44 +1751,44 @@ FTLinstall() {
return 1
fi
+ # Move into the temp ftl directory
+ pushd "$(mktmp -d)" || { echo "Unable to make temporary directory for FTL binary download"; return 1; }
+
# Always replace pihole-FTL.service
install -T -m 0755 "${PI_HOLE_LOCAL_REPO}/advanced/pihole-FTL.service" "/etc/init.d/pihole-FTL"
# If the download worked,
- if curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}" -o "/tmp/${binary}"; then
+ if curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}" -o "${binary}"; then
# get sha1 of the binary we just downloaded for verification.
- curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}.sha1" -o "/tmp/${binary}.sha1"
+ curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}.sha1" -o "${binary}.sha1"
- # Move into the temp directory
- cd /tmp
# If we downloaded binary file (as opposed to text),
if sha1sum --status --quiet -c "${binary}".sha1; then
echo -n "transferred... "
# Stop FTL
stop_service pihole-FTL &> /dev/null
# Install the new version with the correct permissions
- install -T -m 0755 /tmp/${binary} /usr/bin/pihole-FTL
- # Remove the tempoary file
- rm /tmp/${binary} /tmp/${binary}.sha1
+ install -T -m 0755 "${binary}" /usr/bin/pihole-FTL
# Move back into the original directory the user was in
- cd "${orig_dir}"
+ popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
# Install the FTL service
echo -e "${OVER} ${TICK} ${str}"
return 0
# Otherise,
else
+ # the download failed, so just go back to the original directory
+ popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
echo -e "${OVER} ${CROSS} ${str}"
echo -e " ${COL_LIGHT_RED}Error: Download of binary from Github failed${COL_NC}"
- # the download failed, so just go back to the original directory
- cd "${orig_dir}"
return 1
fi
# Otherwise,
else
- cd "${orig_dir}"
+ popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
echo -e "${OVER} ${CROSS} ${str}"
# The URL could not be found
echo -e " ${COL_LIGHT_RED}Error: URL not found${COL_NC}"
+ return 1
fi
}
From b87bcc8f5f876811aa2bf4bd572aeb609f72e94c Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Sat, 24 Feb 2018 13:23:06 +0100
Subject: [PATCH 010/158] Modifications in pihole-FTL.service for FTLDNS
Signed-off-by: DL6ER
---
advanced/pihole-FTL.service | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/advanced/pihole-FTL.service b/advanced/pihole-FTL.service
index 959b7794..a21fd260 100644
--- a/advanced/pihole-FTL.service
+++ b/advanced/pihole-FTL.service
@@ -29,9 +29,11 @@ start() {
mkdir -p /var/run/pihole
mkdir -p /var/log/pihole
chown pihole:pihole /var/run/pihole /var/log/pihole
- rm /var/run/pihole/FTL.sock
- chown pihole:pihole /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /etc/pihole
+ rm /var/run/pihole/FTL.sock 2> /dev/null
+ chown pihole:pihole /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port
+ chown pihole:pihole /etc/pihole /etc/pihole/dhcp.leases /var/log/pihole.log
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
+ setcap CAP_NET_BIND_SERVICE=+eip "$(which pihole-FTL)"
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
echo
fi
From e8ec0dc701d00a2d8a8d5f5a0da5329a4748b059 Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Sun, 25 Feb 2018 09:34:04 +0100
Subject: [PATCH 011/158] Use pihole-FTL resolver in pihole and gravity
Signed-off-by: DL6ER
---
gravity.sh | 6 ++++--
pihole | 13 ++++++-------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index ce2734fc..22c78201 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -42,6 +42,8 @@ preEventHorizon="list.preEventHorizon"
skipDownload="false"
+resolver="pihole-FTL"
+
# Source setupVars from install script
setupVars="${piholeDir}/setupVars.conf"
if [[ -f "${setupVars}" ]];then
@@ -102,7 +104,7 @@ gravity_CheckDNSResolutionAvailable() {
fi
# Determine error output message
- if pidof dnsmasq &> /dev/null; then
+ if pidof "${resolver}" &> /dev/null; then
echo -e " ${CROSS} DNS resolution is currently unavailable"
else
echo -e " ${CROSS} DNS service is not running"
@@ -560,7 +562,7 @@ gravity_Cleanup() {
echo -e "${OVER} ${TICK} ${str}"
# Only restart DNS service if offline
- if ! pidof dnsmasq &> /dev/null; then
+ if ! pidof "${resolver}" &> /dev/null; then
"${PIHOLE_COMMAND}" restartdns
dnsWasOffline=true
fi
diff --git a/pihole b/pihole
index 4421cb87..54701027 100755
--- a/pihole
+++ b/pihole
@@ -14,6 +14,8 @@ readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE"
source "${colfile}"
+resolver="pihole-FTL"
+
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
if [[ -x "$(command -v sudo)" ]]; then
@@ -332,18 +334,18 @@ restartDNS() {
local svcOption svc str output status
svcOption="${1:-}"
- # Determine if we should reload or restart dnsmasq
+ # Determine if we should reload or restart restart
if [[ "${svcOption}" =~ "reload" ]]; then
# Using SIGHUP will NOT re-read any *.conf files
- svc="killall -s SIGHUP dnsmasq"
+ svc="killall -s SIGHUP \"${resolver}\""
else
- # Get PID of dnsmasq to determine if it needs to start or restart
+ # Get PID of resolver to determine if it needs to start or restart
if pidof dnsmasq &> /dev/null; then
svcOption="restart"
else
svcOption="start"
fi
- svc="service dnsmasq ${svcOption}"
+ svc="service \"${resolver}\" ${svcOption}"
fi
# Print output to Terminal, but not to Web Admin
@@ -359,9 +361,6 @@ restartDNS() {
[[ ! -t 1 ]] && local OVER=""
echo -e "${OVER} ${CROSS} ${output}"
fi
-
- # Send signal to FTL to have it re-parse the gravity files
- killall -s SIGHUP pihole-FTL
}
piholeEnable() {
From 09886a3f11889f485febcb16bd057a91496fe5ed Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Sun, 25 Feb 2018 10:11:11 +0100
Subject: [PATCH 012/158] Add resolveconf config to pihole-FTL.service
Signed-off-by: DL6ER
---
advanced/pihole-FTL.service | 3 +++
1 file changed, 3 insertions(+)
diff --git a/advanced/pihole-FTL.service b/advanced/pihole-FTL.service
index a21fd260..5499cbe0 100644
--- a/advanced/pihole-FTL.service
+++ b/advanced/pihole-FTL.service
@@ -20,6 +20,7 @@ is_running() {
ps "$(get_pid)" > /dev/null 2>&1
}
+
# Start the service
start() {
if is_running; then
@@ -34,6 +35,7 @@ start() {
chown pihole:pihole /etc/pihole /etc/pihole/dhcp.leases /var/log/pihole.log
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
setcap CAP_NET_BIND_SERVICE=+eip "$(which pihole-FTL)"
+ echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.piholeFTL
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
echo
fi
@@ -42,6 +44,7 @@ start() {
# Stop the service
stop() {
if is_running; then
+ /sbin/resolvconf -d lo.piholeFTL
kill "$(get_pid)"
for i in {1..5}; do
if ! is_running; then
From 56a2924a3360f4a5ecdc60c603f091e8848e23ca Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Sun, 25 Feb 2018 23:38:34 +0100
Subject: [PATCH 013/158] Unprivileged processes are subject to full permission
checking based on the process's credentials, we have to explicitly allow
pihole-FTL to bind to ports < 1024 (port 53 for DNS) and for various advanced
network-related operations (to allow for handling DHCP requests)
Signed-off-by: DL6ER
---
advanced/pihole-FTL.service | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/advanced/pihole-FTL.service b/advanced/pihole-FTL.service
index 5499cbe0..70d0b9d0 100644
--- a/advanced/pihole-FTL.service
+++ b/advanced/pihole-FTL.service
@@ -34,7 +34,7 @@ start() {
chown pihole:pihole /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port
chown pihole:pihole /etc/pihole /etc/pihole/dhcp.leases /var/log/pihole.log
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
- setcap CAP_NET_BIND_SERVICE=+eip "$(which pihole-FTL)"
+ setcap CAP_NET_BIND_SERVICE,CAP_NET_ADMIN+eip "$(which pihole-FTL)"
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.piholeFTL
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
echo
From fcdc85eab8c658166c1529e308b3067d7005f04e Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Sun, 25 Feb 2018 23:47:11 +0100
Subject: [PATCH 014/158] Remove dnsmasq from dependencies
Signed-off-by: DL6ER
---
automated install/basic-install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index b694b527..eeccbf5d 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -163,7 +163,7 @@ if command -v apt-get &> /dev/null; then
# These programs are stored in an array so they can be looped through later
INSTALLER_DEPS=(apt-utils dialog debconf dhcpcd5 git ${iproute_pkg} whiptail)
# Pi-hole itself has several dependencies that also need to be installed
- PIHOLE_DEPS=(bc cron curl dnsmasq dnsutils iputils-ping lsof netcat sudo unzip wget idn2 sqlite3)
+ PIHOLE_DEPS=(bc cron curl dnsutils iputils-ping lsof netcat sudo unzip wget idn2 sqlite3)
# The Web dashboard has some that also need to be installed
# It's useful to separate the two since our repos are also setup as "Core" code and "Web" code
PIHOLE_WEB_DEPS=(lighttpd ${phpVer}-common ${phpVer}-cgi ${phpVer}-${phpSqlite})
@@ -207,7 +207,7 @@ elif command -v rpm &> /dev/null; then
PKG_INSTALL=(${PKG_MANAGER} install -y)
PKG_COUNT="${PKG_MANAGER} check-update | egrep '(.i686|.x86|.noarch|.arm|.src)' | wc -l"
INSTALLER_DEPS=(dialog git iproute net-tools newt procps-ng)
- PIHOLE_DEPS=(bc bind-utils cronie curl dnsmasq findutils nmap-ncat sudo unzip wget libidn2 psmisc)
+ PIHOLE_DEPS=(bc bind-utils cronie curl findutils nmap-ncat sudo unzip wget libidn2 psmisc)
PIHOLE_WEB_DEPS=(lighttpd lighttpd-fastcgi php php-common php-cli php-pdo)
# EPEL (https://fedoraproject.org/wiki/EPEL) is required for lighttpd on CentOS
if grep -qi 'centos' /etc/redhat-release; then
From 7ed45d26c29bd86e540779e324ad07928823bddb Mon Sep 17 00:00:00 2001
From: DL6ER
Date: Mon, 26 Feb 2018 17:26:51 +0100
Subject: [PATCH 015/158] Remove " " at some places where they shouldn't be
Signed-off-by: DL6ER
---
gravity.sh | 4 ++--
pihole | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index 22c78201..9d3bad95 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -104,7 +104,7 @@ gravity_CheckDNSResolutionAvailable() {
fi
# Determine error output message
- if pidof "${resolver}" &> /dev/null; then
+ if pidof ${resolver} &> /dev/null; then
echo -e " ${CROSS} DNS resolution is currently unavailable"
else
echo -e " ${CROSS} DNS service is not running"
@@ -562,7 +562,7 @@ gravity_Cleanup() {
echo -e "${OVER} ${TICK} ${str}"
# Only restart DNS service if offline
- if ! pidof "${resolver}" &> /dev/null; then
+ if ! pidof ${resolver} &> /dev/null; then
"${PIHOLE_COMMAND}" restartdns
dnsWasOffline=true
fi
diff --git a/pihole b/pihole
index 54701027..c18ba12d 100755
--- a/pihole
+++ b/pihole
@@ -337,7 +337,7 @@ restartDNS() {
# Determine if we should reload or restart restart
if [[ "${svcOption}" =~ "reload" ]]; then
# Using SIGHUP will NOT re-read any *.conf files
- svc="killall -s SIGHUP \"${resolver}\""
+ svc="killall -s SIGHUP ${resolver}"
else
# Get PID of resolver to determine if it needs to start or restart
if pidof dnsmasq &> /dev/null; then
@@ -345,7 +345,7 @@ restartDNS() {
else
svcOption="start"
fi
- svc="service \"${resolver}\" ${svcOption}"
+ svc="service ${resolver} ${svcOption}"
fi
# Print output to Terminal, but not to Web Admin
From 5ecfc58e5fb016d1f8fd031325d8f7c98aa8cb4a Mon Sep 17 00:00:00 2001
From: Ryan Knapper
Date: Wed, 28 Feb 2018 13:06:07 -0500
Subject: [PATCH 016/158] Require exact match
Updated to require an exact match to reduce false-positives, as suggested by DL6ER.
Signed-off-by: Ryan Knapper
---
advanced/Scripts/webpage.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh
index 6e13d24e..3c76e173 100755
--- a/advanced/Scripts/webpage.sh
+++ b/advanced/Scripts/webpage.sh
@@ -346,7 +346,7 @@ CustomizeAdLists() {
elif [[ "${args[2]}" == "disable" ]]; then
sed -i "\\@${args[3]}@s/^http/#http/g" "${list}"
elif [[ "${args[2]}" == "add" ]]; then
- if [[ $(grep -c "${args[3]}" "${list}") -eq 0 ]] ; then
+ if [[ $(grep -c "^${args[3]}$" "${list}") -eq 0 ]] ; then
echo "${args[3]}" >> ${list}
fi
elif [[ "${args[2]}" == "del" ]]; then
From 3425b9a82ecd6fde89437f15c1aa49e3fd7e5271 Mon Sep 17 00:00:00 2001
From: Dan Schaper
Date: Fri, 2 Mar 2018 12:28:53 -0800
Subject: [PATCH 017/158] Fix mktmp > mktemp
Signed-off-by: Dan Schaper
---
automated install/basic-install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index bdf99ee3..704055d5 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1752,7 +1752,7 @@ FTLinstall() {
fi
# Move into the temp ftl directory
- pushd "$(mktmp -d)" || { echo "Unable to make temporary directory for FTL binary download"; return 1; }
+ pushd "$(mktemp -d)" || { echo "Unable to make temporary directory for FTL binary download"; return 1; }
# Always replace pihole-FTL.service
install -T -m 0755 "${PI_HOLE_LOCAL_REPO}/advanced/pihole-FTL.service" "/etc/init.d/pihole-FTL"
From 0b87f489d53ceb11f9c37b523be53d74e8cc43a8 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Sat, 3 Mar 2018 15:59:56 +0000
Subject: [PATCH 018/158] Look for pihole-FTL, not dnsmasq!
Signed-off-by: Adam Warner
---
pihole | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pihole b/pihole
index c18ba12d..3de16caf 100755
--- a/pihole
+++ b/pihole
@@ -340,7 +340,7 @@ restartDNS() {
svc="killall -s SIGHUP ${resolver}"
else
# Get PID of resolver to determine if it needs to start or restart
- if pidof dnsmasq &> /dev/null; then
+ if pidof pihole-FTL &> /dev/null; then
svcOption="restart"
else
svcOption="start"
From ad1f210528009c5655499ae6b75a47d43964423b Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Fri, 2 Mar 2018 20:47:01 +0000
Subject: [PATCH 019/158] As we no longer add source lists to the whitelist by
default, gravity falls over on new installs.
Signed-off-by: Adam Warner
---
gravity.sh | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index cfc7566e..395ea548 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -505,8 +505,13 @@ gravity_ParseBlacklistDomains() {
# Empty $accretionDisc if it already exists, otherwise, create it
: > "${piholeDir}/${accretionDisc}"
-
- gravity_ParseDomainsIntoHosts "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}"
+
+ if [[ -f "${piholeDir}/${whitelistMatter}" ]]; then
+ gravity_ParseDomainsIntoHosts "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}"
+ else
+ # There was no whitelist file, so use preEventHorizon instead of whitelistMatter.
+ gravity_ParseDomainsIntoHosts "${piholeDir}/${preEventHorizon}" "${piholeDir}/${accretionDisc}"
+ fi
# Move the file over as /etc/pihole/gravity.list so dnsmasq can use it
output=$( { mv "${piholeDir}/${accretionDisc}" "${adList}"; } 2>&1 )
From 8cf8da4c78cbcf92c3e196d90332a15395250520 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Tue, 6 Mar 2018 18:44:57 +0000
Subject: [PATCH 020/158] - Check file /etc/pihole/ftlbranch for current FTL
branch, download from github if master, or pi-hole.net if other - Check if
downloaded binary file can resolve queries, if so stop and disable dnsmasq -
Add service_disable function - Add dependency libcap2-bin on debian to enable
setcap. Need to check other distos -Always download FTL binary if
/etc/pihole/ftlbranch does not contain "master" - Change some
strings/variables that reference dnsmasq and change them to pihole/pihole-FTL
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 160 +++++++++++++++++++++--------
test/test_automated_install.py | 2 +-
2 files changed, 121 insertions(+), 41 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 32352306..39855a58 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -163,7 +163,7 @@ if command -v apt-get &> /dev/null; then
# These programs are stored in an array so they can be looped through later
INSTALLER_DEPS=(apt-utils dialog debconf dhcpcd5 git ${iproute_pkg} whiptail)
# Pi-hole itself has several dependencies that also need to be installed
- PIHOLE_DEPS=(bc cron curl dnsutils iputils-ping lsof netcat sudo unzip wget idn2 sqlite3)
+ PIHOLE_DEPS=(bc cron curl dnsutils iputils-ping lsof netcat sudo unzip wget idn2 sqlite3 libcap2-bin dns-root-data resolvconf)
# The Web dashboard has some that also need to be installed
# It's useful to separate the two since our repos are also setup as "Core" code and "Web" code
PIHOLE_WEB_DEPS=(lighttpd ${phpVer}-common ${phpVer}-cgi ${phpVer}-${phpSqlite})
@@ -172,9 +172,7 @@ if command -v apt-get &> /dev/null; then
# group,
LIGHTTPD_GROUP="www-data"
# and config file
- LIGHTTPD_CFG="lighttpd.conf.debian"
- # The DNS server user
- DNSMASQ_USER="dnsmasq"
+ LIGHTTPD_CFG="lighttpd.conf.debian"
# A function to check...
test_dpkg_lock() {
@@ -202,12 +200,12 @@ elif command -v rpm &> /dev/null; then
PKG_MANAGER="yum"
fi
- # Fedora and family update cache on every PKG_INSTALL call, no need for a separate update.
+ # Fedora and family update cache on every PKG_INSTALL call, no need for a separate update.
UPDATE_PKG_CACHE=":"
PKG_INSTALL=(${PKG_MANAGER} install -y)
PKG_COUNT="${PKG_MANAGER} check-update | egrep '(.i686|.x86|.noarch|.arm|.src)' | wc -l"
INSTALLER_DEPS=(dialog git iproute net-tools newt procps-ng)
- PIHOLE_DEPS=(bc bind-utils cronie curl findutils nmap-ncat sudo unzip wget libidn2 psmisc)
+ PIHOLE_DEPS=(bc bind-utils cronie curl findutils nmap-ncat sudo unzip wget libidn2 psmisc libnettle.so.4)
PIHOLE_WEB_DEPS=(lighttpd lighttpd-fastcgi php php-common php-cli php-pdo)
# EPEL (https://fedoraproject.org/wiki/EPEL) is required for lighttpd on CentOS
if grep -qi 'centos' /etc/redhat-release; then
@@ -215,8 +213,7 @@ elif command -v rpm &> /dev/null; then
fi
LIGHTTPD_USER="lighttpd"
LIGHTTPD_GROUP="lighttpd"
- LIGHTTPD_CFG="lighttpd.conf.fedora"
- DNSMASQ_USER="nobody"
+ LIGHTTPD_CFG="lighttpd.conf.fedora"
# If neither apt-get or rmp/dnf are found
else
@@ -984,6 +981,10 @@ version_check_dnsmasq() {
fi
echo -en " ${INFO} Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..."
+ # Check to see if dnsmasq directory exists (it may not due to being a fresh install and dnsmasq no longer being a dependency)
+ if [[ ! -d "/etc/dnsmasq.d" ]];then
+ mkdir "/etc/dnsmasq.d"
+ fi
# Copy the new Pi-hole DNS config file into the dnsmasq.d directory
cp ${dnsmasq_pihole_01_snippet} ${dnsmasq_pihole_01_location}
echo -e "${OVER} ${TICK} Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf"
@@ -1158,6 +1159,24 @@ enable_service() {
echo -e "${OVER} ${TICK} ${str}"
}
+# Disable service so that it will not with next reboot
+disable_service() {
+ # Local, named variables
+ local str="Disabling ${1} service"
+ echo ""
+ echo -ne " ${INFO} ${str}..."
+ # If systemctl exists,
+ if command -v systemctl &> /dev/null; then
+ # use that to disable the service
+ systemctl disable "${1}" &> /dev/null
+ # Othwerwise,
+ else
+ # use update-rc.d to accomplish this
+ update-rc.d "${1}" disable &> /dev/null
+ fi
+ echo -e "${OVER} ${TICK} ${str}"
+}
+
update_package_cache() {
# Running apt-get update/upgrade with minimal output can cause some issues with
# requiring user input (e.g password for phpmyadmin see #218)
@@ -1286,7 +1305,7 @@ install_dependent_packages() {
# Create logfiles if necessary
CreateLogFile() {
- local str="Creating log and changing owner to dnsmasq"
+ local str="Creating log and changing owner to pihole"
echo ""
echo -ne " ${INFO} ${str}..."
# If the pihole log does not exist,
@@ -1296,7 +1315,7 @@ CreateLogFile() {
# set the permissions,
chmod 644 /var/log/pihole.log
# and owners
- chown "${DNSMASQ_USER}":root /var/log/pihole.log
+ chown pihole:root /var/log/pihole.log
echo -e "${OVER} ${TICK} ${str}"
# Otherwise,
else
@@ -1423,7 +1442,7 @@ configureFirewall() {
# ask if the user wants to install Pi-hole's default firwall rules
whiptail --title "Firewall in use" --yesno "We have detected a running firewall\\n\\nPi-hole currently requires HTTP and DNS port access.\\n\\n\\n\\nInstall Pi-hole default firewall rules?" ${r} ${c} || \
{ echo -e " ${INFO} Not installing firewall rulesets."; return 0; }
- echo -e " ${TICK} Configuring FirewallD for httpd and dnsmasq"
+ echo -e " ${TICK} Configuring FirewallD for httpd and pihole-FTL"
# Allow HTTP and DNS traffice
firewall-cmd --permanent --add-service=http --add-service=dns
# Reload the firewall to apply these changes
@@ -1757,11 +1776,45 @@ FTLinstall() {
# Always replace pihole-FTL.service
install -T -m 0755 "${PI_HOLE_LOCAL_REPO}/advanced/pihole-FTL.service" "/etc/init.d/pihole-FTL"
- # If the download worked,
- if curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}" -o "${binary}"; then
- # get sha1 of the binary we just downloaded for verification.
- curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}/${binary}.sha1" -o "${binary}.sha1"
+ local ftlBranch
+ local url
+ local ftlBranch
+
+ if [[ -f "/etc/pihole/ftlbranch" ]];then
+ ftlBranch=$( /dev/null; then
+ if [[ $(which dnsmasq 2>/dev/null) ]]; then
+ stop_service dnsmasq
+ disable_service dnsmasq
+ #ensure /etc/dnsmasq.conf contains `conf-dir=/etc/dnsmasq.d`
+ confdir="conf-dir=/etc/dnsmasq.d"
+ conffile="/etc/dnsmasq.conf"
+ if ! grep -q "$confdir" "$conffile"; then
+ echo "$confdir" >> "$conffile"
+ fi
+ fi
+ fi
+
# If we downloaded binary file (as opposed to text),
if sha1sum --status --quiet -c "${binary}".sha1; then
echo -n "transferred... "
@@ -1865,30 +1918,42 @@ FTLdetect() {
echo -e " ${INFO} Checking for existing FTL binary..."
local ftlLoc=$(which pihole-FTL 2>/dev/null)
+
+ local ftlBranch
+
+ if [[ -f "/etc/pihole/ftlbranch" ]];then
+ ftlBranch=$(/dev/null) ]]; then
+ if pihole-FTL --resolver > /dev/null; then
+ stop_service pihole-FTL
+ else
+ stop_service dnsmasq
+ fi
+ else
+ if [[ $(which dnsmasq 2>/dev/null) ]]; then
+ stop_service dnsmasq
+ fi
+ fi
- stop_service dnsmasq
if [[ "${INSTALL_WEB}" == true ]]; then
stop_service lighttpd
fi
@@ -2094,8 +2171,11 @@ main() {
echo -e " ${INFO} Restarting services..."
# Start services
- start_service dnsmasq
- enable_service dnsmasq
+ # Only start and enable dnsmasq if FTL does not have the --resolver switch
+ if ! pihole-FTL --resolver > /dev/null; then
+ start_service dnsmasq
+ enable_service dnsmasq
+ fi
# If the Web server was installed,
if [[ "${INSTALL_WEB}" == true ]]; then
diff --git a/test/test_automated_install.py b/test/test_automated_install.py
index 0e961c7f..2c65c660 100644
--- a/test/test_automated_install.py
+++ b/test/test_automated_install.py
@@ -80,7 +80,7 @@ def test_configureFirewall_firewalld_running_no_errors(Pihole):
source /opt/pihole/basic-install.sh
configureFirewall
''')
- expected_stdout = 'Configuring FirewallD for httpd and dnsmasq'
+ expected_stdout = 'Configuring FirewallD for httpd and pihole-FTL'
assert expected_stdout in configureFirewall.stdout
firewall_calls = Pihole.run('cat /var/log/firewall-cmd').stdout
assert 'firewall-cmd --state' in firewall_calls
From 6584933e9297f82c90e68d4bff3167189fec5870 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Tue, 6 Mar 2018 18:49:38 +0000
Subject: [PATCH 021/158] fix stickler complaints
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 39855a58..f435e269 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1931,8 +1931,10 @@ FTLdetect() {
FTLinstall "${binary}" || return 1
else
if [[ ${ftlLoc} ]]; then
- local FTLversion=$(/usr/bin/pihole-FTL tag)
- local FTLlatesttag=$(curl -sI https://github.com/pi-hole/FTL/releases/latest | grep 'Location' | awk -F '/' '{print $NF}' | tr -d '\r\n')
+ local FTLversion
+ FTLversion=$(/usr/bin/pihole-FTL tag)
+ local FTLlatesttag
+ FTLlatesttag=$(curl -sI https://github.com/pi-hole/FTL/releases/latest | grep 'Location' | awk -F '/' '{print $NF}' | tr -d '\r\n')
if [[ "${FTLversion}" != "${FTLlatesttag}" ]]; then
# Install FTL
@@ -1940,8 +1942,10 @@ FTLdetect() {
else
echo -e " ${INFO} Latest FTL Binary already installed (${FTLlatesttag}). Confirming Checksum..."
- local remoteSha1=$(curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${FTLversion%$'\r'}/${binary}.sha1" | cut -d ' ' -f 1)
- local localSha1=$(sha1sum "$(which pihole-FTL)" | cut -d ' ' -f 1)
+ local remoteSha1
+ remoteSha1=$(curl -sSL --fail "https://github.com/pi-hole/FTL/releases/download/${FTLversion%$'\r'}/${binary}.sha1" | cut -d ' ' -f 1)
+ local localSha1
+ localSha1=$(sha1sum "$(which pihole-FTL)" | cut -d ' ' -f 1)
if [[ "${remoteSha1}" != "${localSha1}" ]]; then
echo -e " ${INFO} Corruption detected..."
From 512ec7fb8709aabb818a27d2d1390518c346eb6c Mon Sep 17 00:00:00 2001
From: Riley Avron
Date: Tue, 6 Mar 2018 21:44:29 -0800
Subject: [PATCH 022/158] Remove unneeded ifs in awk
Signed-off-by: Riley Avron
---
gravity.sh | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index 395ea548..f1af8d9e 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -345,13 +345,14 @@ gravity_ParseFileIntoDomains() {
# Scanning for "^IPv4$" is too slow with large (1M) lists on low-end hardware
echo -ne " ${INFO} Format: URL"
- awk '{
+ awk '
# Remove URL protocol, optional "username:password@", and ":?/;"
- if ($0 ~ /[:?\/;]/) { gsub(/(^.*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
- # Remove lines which are only IPv4 addresses
- if ($0 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) { $0="" }
- if ($0) { print $0 }
- }' "${source}" 2> /dev/null > "${destination}"
+ /[:?\/;]/ { gsub(/(^.*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
+ # Skip lines which are only IPv4 addresses
+ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ { next }
+ # Print if nonempty
+ length { print $0 }
+ ' "${source}" 2> /dev/null > "${destination}"
echo -e "${OVER} ${TICK} Format: URL"
else
From f390671018b46c9e60ca99bb6810ea43dfb6a9fc Mon Sep 17 00:00:00 2001
From: Riley Avron
Date: Tue, 6 Mar 2018 21:48:12 -0800
Subject: [PATCH 023/158] Improve scheme matching to avoid inadvertent blocking
Signed-off-by: Riley Avron
---
gravity.sh | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/gravity.sh b/gravity.sh
index f1af8d9e..011d2f8c 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -346,12 +346,16 @@ gravity_ParseFileIntoDomains() {
echo -ne " ${INFO} Format: URL"
awk '
- # Remove URL protocol, optional "username:password@", and ":?/;"
- /[:?\/;]/ { gsub(/(^.*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
+ # Remove URL scheme, optional "username:password@", and ":?/;"
+ # The scheme must be matched carefully to avoid blocking the wrong URL
+ # in cases like:
+ # http://www.evil.com?http://www.good.com
+ # See RFC 3986 section 3.1 for details.
+ /[:?\/;]/ { gsub(/(^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
# Skip lines which are only IPv4 addresses
/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ { next }
# Print if nonempty
- length { print $0 }
+ length { print }
' "${source}" 2> /dev/null > "${destination}"
echo -e "${OVER} ${TICK} Format: URL"
From 246d5cd5879863d7049d6f17832ea11e4b0b642b Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 21:41:00 +0000
Subject: [PATCH 024/158] store checked out FTL branch in /etc/pihole/ftlbranch
Signed-off-by: Adam Warner
---
advanced/Scripts/piholeCheckout.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/advanced/Scripts/piholeCheckout.sh b/advanced/Scripts/piholeCheckout.sh
index 9e97c69c..423114b1 100644
--- a/advanced/Scripts/piholeCheckout.sh
+++ b/advanced/Scripts/piholeCheckout.sh
@@ -332,6 +332,7 @@ checkout() {
if check_download_exists "$path"; then
echo " ${TICK} Branch ${2} exists"
+ echo "${2}" > /etc/pihole/ftlbranch
FTLinstall "${binary}" "${path}"
else
echo " ${CROSS} Requested branch \"${2}\" is not available"
From 76cb129d3c9310077cbb29e2323fde35fbd2e0a0 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 21:48:09 +0000
Subject: [PATCH 025/158] don't forget `master` and `development` branches!
Signed-off-by: Adam Warner
---
advanced/Scripts/piholeCheckout.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/advanced/Scripts/piholeCheckout.sh b/advanced/Scripts/piholeCheckout.sh
index 423114b1..21919ddf 100644
--- a/advanced/Scripts/piholeCheckout.sh
+++ b/advanced/Scripts/piholeCheckout.sh
@@ -256,6 +256,7 @@ checkout() {
get_binary_name
local path
path="development/${binary}"
+ echo "development" > /etc/pihole/ftlbranch
FTLinstall "${binary}" "${path}"
elif [[ "${1}" == "master" ]] ; then
# Shortcut to check out master branches
@@ -270,6 +271,7 @@ checkout() {
get_binary_name
local path
path="master/${binary}"
+ echo "master" > /etc/pihole/ftlbranch
FTLinstall "${binary}" "${path}"
elif [[ "${1}" == "core" ]] ; then
str="Fetching branches from ${piholeGitUrl}"
From 71d8f5f96fa8a8edf5618f58c6b1d28f77887c00 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 22:00:14 +0000
Subject: [PATCH 026/158] remove PA YAML file
Signed-off-by: Adam Warner
---
.pullapprove.yml | 38 --------------------------------------
1 file changed, 38 deletions(-)
delete mode 100644 .pullapprove.yml
diff --git a/.pullapprove.yml b/.pullapprove.yml
deleted file mode 100644
index 30888234..00000000
--- a/.pullapprove.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-version: 2
-
-always_pending:
- title_regex: '(WIP|wip)'
- labels:
- - wip
- explanation: 'This PR is a work in progress...'
-
-group_defaults:
- reset_on_push:
- enabled: true
- reject_value: -2
- approve_regex: '^(Approved|:shipit:|:\+1:|Engage|:taco:)'
- reject_regex: '^(Rejected|:-1:|Borg)'
- author_approval:
- auto: true
-
-
-groups:
- development:
- approve_by_comment:
- enabled: true
- conditions:
- branches:
- - development
- required: 2
- teams:
- - approvers
-
- master:
- approve_by_comment:
- enabled: true
- conditions:
- branches:
- - master
- required: 4
- teams:
- - approvers
From acd69fa4b07e55ec1ffc4e13af85d0fdd18ba1af Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 22:19:11 +0000
Subject: [PATCH 027/158] silence push/popd
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index f435e269..4efa9f30 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1771,7 +1771,7 @@ FTLinstall() {
fi
# Move into the temp ftl directory
- pushd "$(mktemp -d)" || { echo "Unable to make temporary directory for FTL binary download"; return 1; }
+ pushd "$(mktemp -d)" > /dev/null || { echo "Unable to make temporary directory for FTL binary download"; return 1; }
# Always replace pihole-FTL.service
install -T -m 0755 "${PI_HOLE_LOCAL_REPO}/advanced/pihole-FTL.service" "/etc/init.d/pihole-FTL"
@@ -1830,14 +1830,14 @@ FTLinstall() {
# Otherise,
else
# the download failed, so just go back to the original directory
- popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
+ popd > /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
echo -e "${OVER} ${CROSS} ${str}"
echo -e " ${COL_LIGHT_RED}Error: Download of binary from Github failed${COL_NC}"
return 1
fi
# Otherwise,
else
- popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
+ popd > /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
echo -e "${OVER} ${CROSS} ${str}"
# The URL could not be found
echo -e " ${COL_LIGHT_RED}Error: URL not found${COL_NC}"
From 7193f40b879b43d5493d18ad637a963a16b0fd3f Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 22:23:05 +0000
Subject: [PATCH 028/158] remove libnettle, missed a >/dev/null
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 4efa9f30..de118052 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -205,7 +205,7 @@ elif command -v rpm &> /dev/null; then
PKG_INSTALL=(${PKG_MANAGER} install -y)
PKG_COUNT="${PKG_MANAGER} check-update | egrep '(.i686|.x86|.noarch|.arm|.src)' | wc -l"
INSTALLER_DEPS=(dialog git iproute net-tools newt procps-ng)
- PIHOLE_DEPS=(bc bind-utils cronie curl findutils nmap-ncat sudo unzip wget libidn2 psmisc libnettle.so.4)
+ PIHOLE_DEPS=(bc bind-utils cronie curl findutils nmap-ncat sudo unzip wget libidn2 psmisc)
PIHOLE_WEB_DEPS=(lighttpd lighttpd-fastcgi php php-common php-cli php-pdo)
# EPEL (https://fedoraproject.org/wiki/EPEL) is required for lighttpd on CentOS
if grep -qi 'centos' /etc/redhat-release; then
@@ -1823,7 +1823,7 @@ FTLinstall() {
# Install the new version with the correct permissions
install -T -m 0755 "${binary}" /usr/bin/pihole-FTL
# Move back into the original directory the user was in
- popd || { echo "Unable to return to original directory after FTL binary download."; return 1; }
+ popd > /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
# Install the FTL service
echo -e "${OVER} ${TICK} ${str}"
return 0
From 84bd86f1eecb77e5b6a9b290657f15effc02a9a3 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 7 Mar 2018 23:31:28 +0000
Subject: [PATCH 029/158] - Test to see if dnsmasq service is enabled before
stopping and disabling it. - Some formatting tweaks to the `start_service`
`stop_`service` `disable_service` and `enable_service` commands
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 71 ++++++++++++++++++------------
1 file changed, 44 insertions(+), 27 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index de118052..22d549e1 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1112,8 +1112,7 @@ installConfigs() {
stop_service() {
# Stop service passed in as argument.
# Can softfail, as process may not be installed when this is called
- local str="Stopping ${1} service"
- echo ""
+ local str="Stopping ${1} service"
echo -ne " ${INFO} ${str}..."
if command -v systemctl &> /dev/null; then
systemctl stop "${1}" &> /dev/null || true
@@ -1126,8 +1125,7 @@ stop_service() {
# Start/Restart service passed in as argument
start_service() {
# Local, named variables
- local str="Starting ${1} service"
- echo ""
+ local str="Starting ${1} service"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1144,8 +1142,7 @@ start_service() {
# Enable service so that it will start with next reboot
enable_service() {
# Local, named variables
- local str="Enabling ${1} service to start on reboot"
- echo ""
+ local str="Enabling ${1} service to start on reboot"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1162,8 +1159,7 @@ enable_service() {
# Disable service so that it will not with next reboot
disable_service() {
# Local, named variables
- local str="Disabling ${1} service"
- echo ""
+ local str="Disabling ${1} service"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1177,6 +1173,26 @@ disable_service() {
echo -e "${OVER} ${TICK} ${str}"
}
+check_service_active() {
+ # If systemctl exists,
+ if command -v systemctl &> /dev/null; then
+ # use that to disable the service
+ if systemctl status "${1}" | grep -q "Active: active" > /dev/null; then
+ return 0
+ else
+ return 1
+ fi
+ # Othwerwise,
+ else
+ # fall back to service command
+ if service "${1}" status | grep "Active: active" > /dev/null; then
+ return 0
+ else
+ return 1
+ fi
+ fi
+}
+
update_package_cache() {
# Running apt-get update/upgrade with minimal output can cause some issues with
# requiring user input (e.g password for phpmyadmin see #218)
@@ -1796,25 +1812,8 @@ FTLinstall() {
# If the download worked,
if curl -sSL --fail "${url}/${binary}" -o "${binary}"; then
# get sha1 of the binary we just downloaded for verification.
- curl -sSL --fail "${url}/${binary}.sha1" -o "${binary}.sha1"
-
- # Make the tempory binary executable so that we can test the --resolver flag
- chmod +x "${binary}"
+ curl -sSL --fail "${url}/${binary}.sha1" -o "${binary}.sha1"
- # If the --resolver flag returns True (exit code 0), then we can safely stop & disable dnsmasq
- if ./"${binary}" --resolver > /dev/null; then
- if [[ $(which dnsmasq 2>/dev/null) ]]; then
- stop_service dnsmasq
- disable_service dnsmasq
- #ensure /etc/dnsmasq.conf contains `conf-dir=/etc/dnsmasq.d`
- confdir="conf-dir=/etc/dnsmasq.d"
- conffile="/etc/dnsmasq.conf"
- if ! grep -q "$confdir" "$conffile"; then
- echo "$confdir" >> "$conffile"
- fi
- fi
- fi
-
# If we downloaded binary file (as opposed to text),
if sha1sum --status --quiet -c "${binary}".sha1; then
echo -n "transferred... "
@@ -1826,6 +1825,23 @@ FTLinstall() {
popd > /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
# Install the FTL service
echo -e "${OVER} ${TICK} ${str}"
+ # If the --resolver flag returns True (exit code 0), then we can safely stop & disable dnsmasq
+ if pihole-FTL --resolver > /dev/null; then
+ if [[ $(which dnsmasq 2>/dev/null) ]]; then
+ if check_service_active "dnsmasq";then
+ echo " ${INFO} FTL can now resolve DNS Queries without dnsmasq running separately"
+ stop_service dnsmasq
+ disable_service dnsmasq
+ fi
+ fi
+
+ #ensure /etc/dnsmasq.conf contains `conf-dir=/etc/dnsmasq.d`
+ confdir="conf-dir=/etc/dnsmasq.d"
+ conffile="/etc/dnsmasq.conf"
+ if ! grep -q "$confdir" "$conffile"; then
+ echo "$confdir" >> "$conffile"
+ fi
+ fi
return 0
# Otherise,
else
@@ -1834,7 +1850,7 @@ FTLinstall() {
echo -e "${OVER} ${CROSS} ${str}"
echo -e " ${COL_LIGHT_RED}Error: Download of binary from Github failed${COL_NC}"
return 1
- fi
+ fi
# Otherwise,
else
popd > /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
@@ -1959,6 +1975,7 @@ FTLdetect() {
FTLinstall "${binary}" || return 1
fi
fi
+ echo ""
}
make_temporary_log() {
From 2895b9bfb70e9fa10e0a8118ba163961b52c1ddb Mon Sep 17 00:00:00 2001
From: justinamcafee
Date: Sat, 10 Mar 2018 17:33:31 -0600
Subject: [PATCH 030/158] Added support for FamilyShield from OpenDNS
With a very minor code change, individuals can now implement restrictions on dangers, disturbing, or otherwise adult oriented content without the need for managed restrictions.
This is a fairly non-invasive change and will benefit users who intend to use VPN for home or small business uses where access to such material may be undesirable.
---
automated install/basic-install.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index c87d00a6..ccdb479c 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -771,6 +771,7 @@ setDNS() {
Comodo ""
DNSWatch ""
Quad9 ""
+ FamilyShield ""
Custom "")
# In a whiptail dialog, show the options
DNSchoices=$(whiptail --separate-output --menu "Select Upstream DNS Provider. To use your own, select Custom." ${r} ${c} 7 \
@@ -817,6 +818,10 @@ setDNS() {
PIHOLE_DNS_1="9.9.9.9"
PIHOLE_DNS_2="149.112.112.112"
;;
+ FamilyShield)
+ echo "FamilyShield servers"
+ PIHOLE_DNS_1="208.67.222.123"
+ PIHOLE_DNS_2="208.67.220.123"
Custom)
# Until the DNS settings are selected,
until [[ "${DNSSettingsCorrect}" = True ]]; do
From 30af6e73be1ac05dd05a274aea1f583fd098bc06 Mon Sep 17 00:00:00 2001
From: justinamcafee
Date: Sat, 10 Mar 2018 17:36:47 -0600
Subject: [PATCH 031/158] added ;; to line 825
Misformated case. Updated correct case
---
automated install/basic-install.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index ccdb479c..29dc6cd1 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -822,6 +822,7 @@ setDNS() {
echo "FamilyShield servers"
PIHOLE_DNS_1="208.67.222.123"
PIHOLE_DNS_2="208.67.220.123"
+ ;;
Custom)
# Until the DNS settings are selected,
until [[ "${DNSSettingsCorrect}" = True ]]; do
From b92ccb2de4204299717b02b9c3291ed22dfdcc3d Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Wed, 14 Mar 2018 20:01:06 +0000
Subject: [PATCH 032/158] Additionally `mask` the dnsmasq service on systems
with systemctl
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 22d549e1..47348775 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1173,6 +1173,25 @@ disable_service() {
echo -e "${OVER} ${TICK} ${str}"
}
+# Mask service so that it cannot be started accidentally
+mask_service() {
+ # Local, named variables
+ local str="Masking ${1} service"
+ echo -ne " ${INFO} ${str}..."
+ # If systemctl exists,
+ if command -v systemctl &> /dev/null; then
+ # use that to disable the service
+ systemctl mask "${1}" &> /dev/null
+ echo -e "${OVER} ${TICK} ${str}"
+ # Othwerwise,
+ else
+ # use update-rc.d to accomplish this
+ echo -e "${OVER} ${CROSS} ${str}"
+ echo -e " ${INFO} systemctl not detected. Cannot mask service."
+ fi
+
+}
+
check_service_active() {
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1831,7 +1850,8 @@ FTLinstall() {
if check_service_active "dnsmasq";then
echo " ${INFO} FTL can now resolve DNS Queries without dnsmasq running separately"
stop_service dnsmasq
- disable_service dnsmasq
+ disable_service dnsmasq
+ mask_service dnsmasq
fi
fi
From 44d8cb77e3a56b897a3769b7fad14f4fded93233 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Sat, 17 Mar 2018 22:48:11 +0000
Subject: [PATCH 033/158] Kill off `mask_service` function
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 31 ++++++------------------------
1 file changed, 6 insertions(+), 25 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 47348775..6a160be6 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1148,7 +1148,7 @@ enable_service() {
if command -v systemctl &> /dev/null; then
# use that to enable the service
systemctl enable "${1}" &> /dev/null
- # Othwerwise,
+ # Otherwise,
else
# use update-rc.d to accomplish this
update-rc.d "${1}" defaults &> /dev/null
@@ -1165,7 +1165,7 @@ disable_service() {
if command -v systemctl &> /dev/null; then
# use that to disable the service
systemctl disable "${1}" &> /dev/null
- # Othwerwise,
+ # Otherwise,
else
# use update-rc.d to accomplish this
update-rc.d "${1}" disable &> /dev/null
@@ -1173,25 +1173,6 @@ disable_service() {
echo -e "${OVER} ${TICK} ${str}"
}
-# Mask service so that it cannot be started accidentally
-mask_service() {
- # Local, named variables
- local str="Masking ${1} service"
- echo -ne " ${INFO} ${str}..."
- # If systemctl exists,
- if command -v systemctl &> /dev/null; then
- # use that to disable the service
- systemctl mask "${1}" &> /dev/null
- echo -e "${OVER} ${TICK} ${str}"
- # Othwerwise,
- else
- # use update-rc.d to accomplish this
- echo -e "${OVER} ${CROSS} ${str}"
- echo -e " ${INFO} systemctl not detected. Cannot mask service."
- fi
-
-}
-
check_service_active() {
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1201,7 +1182,7 @@ check_service_active() {
else
return 1
fi
- # Othwerwise,
+ # Otherwise,
else
# fall back to service command
if service "${1}" status | grep "Active: active" > /dev/null; then
@@ -1385,7 +1366,7 @@ installPiholeWeb() {
# back it up
mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
echo -e "${OVER} ${TICK} ${str}"
- # Othwerwise,
+ # Otherwise,
else
# don't do anything
echo -e "${OVER} ${CROSS} ${str}
@@ -1458,7 +1439,7 @@ create_pihole_user() {
if id -u pihole &> /dev/null; then
# just show a success
echo -ne "${OVER} ${TICK} ${str}"
- # Othwerwise,
+ # Otherwise,
else
echo -ne "${OVER} ${CROSS} ${str}"
local str="Creating user 'pihole'"
@@ -1498,7 +1479,7 @@ configureFirewall() {
iptables -C INPUT -p tcp -m tcp --dport 4711:4720 -i lo -j ACCEPT &> /dev/null || iptables -I INPUT 1 -p tcp -m tcp --dport 4711:4720 -i lo -j ACCEPT
return 0
fi
- # Othwerwise,
+ # Otherwise,
else
# no firewall is running
echo -e " ${INFO} No active firewall detected.. skipping firewall configuration"
From f18bf35b208813e798affdb15ed4333e46b8030a Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Sat, 17 Mar 2018 22:56:50 +0000
Subject: [PATCH 034/158] use `systemctl is-enabled` to check enabled status of
service
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 6a160be6..ddebe6fa 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1176,12 +1176,9 @@ disable_service() {
check_service_active() {
# If systemctl exists,
if command -v systemctl &> /dev/null; then
- # use that to disable the service
- if systemctl status "${1}" | grep -q "Active: active" > /dev/null; then
- return 0
- else
- return 1
- fi
+ # use that to check the status of the service
+ systemctl is-enabled "${1}" > /dev/null
+ return $?
# Otherwise,
else
# fall back to service command
@@ -1832,7 +1829,6 @@ FTLinstall() {
echo " ${INFO} FTL can now resolve DNS Queries without dnsmasq running separately"
stop_service dnsmasq
disable_service dnsmasq
- mask_service dnsmasq
fi
fi
From e2e8b733a85a1f290269993823db138583e65265 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Sun, 18 Mar 2018 00:13:10 +0000
Subject: [PATCH 035/158] tidy up function
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index ddebe6fa..2574b4a3 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1177,17 +1177,12 @@ check_service_active() {
# If systemctl exists,
if command -v systemctl &> /dev/null; then
# use that to check the status of the service
- systemctl is-enabled "${1}" > /dev/null
- return $?
+ systemctl is-enabled "${1}" > /dev/null
# Otherwise,
else
# fall back to service command
- if service "${1}" status | grep "Active: active" > /dev/null; then
- return 0
- else
- return 1
- fi
- fi
+ service "${1}" status > /dev/null
+ fi
}
update_package_cache() {
@@ -1824,12 +1819,12 @@ FTLinstall() {
echo -e "${OVER} ${TICK} ${str}"
# If the --resolver flag returns True (exit code 0), then we can safely stop & disable dnsmasq
if pihole-FTL --resolver > /dev/null; then
- if [[ $(which dnsmasq 2>/dev/null) ]]; then
+ if which dnsmasq > /dev/null; then
if check_service_active "dnsmasq";then
echo " ${INFO} FTL can now resolve DNS Queries without dnsmasq running separately"
stop_service dnsmasq
disable_service dnsmasq
- fi
+ fi
fi
#ensure /etc/dnsmasq.conf contains `conf-dir=/etc/dnsmasq.d`
From d26ea2b948b73865c9cdcd0c90ac0fb5b33bc7c8 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Sun, 18 Mar 2018 00:38:34 +0000
Subject: [PATCH 036/158] remove trailing whitespace
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 38 +++++++++++++++---------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 2574b4a3..a5d52309 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -172,7 +172,7 @@ if command -v apt-get &> /dev/null; then
# group,
LIGHTTPD_GROUP="www-data"
# and config file
- LIGHTTPD_CFG="lighttpd.conf.debian"
+ LIGHTTPD_CFG="lighttpd.conf.debian"
# A function to check...
test_dpkg_lock() {
@@ -200,7 +200,7 @@ elif command -v rpm &> /dev/null; then
PKG_MANAGER="yum"
fi
- # Fedora and family update cache on every PKG_INSTALL call, no need for a separate update.
+ # Fedora and family update cache on every PKG_INSTALL call, no need for a separate update.
UPDATE_PKG_CACHE=":"
PKG_INSTALL=(${PKG_MANAGER} install -y)
PKG_COUNT="${PKG_MANAGER} check-update | egrep '(.i686|.x86|.noarch|.arm|.src)' | wc -l"
@@ -213,7 +213,7 @@ elif command -v rpm &> /dev/null; then
fi
LIGHTTPD_USER="lighttpd"
LIGHTTPD_GROUP="lighttpd"
- LIGHTTPD_CFG="lighttpd.conf.fedora"
+ LIGHTTPD_CFG="lighttpd.conf.fedora"
# If neither apt-get or rmp/dnf are found
else
@@ -1112,7 +1112,7 @@ installConfigs() {
stop_service() {
# Stop service passed in as argument.
# Can softfail, as process may not be installed when this is called
- local str="Stopping ${1} service"
+ local str="Stopping ${1} service"
echo -ne " ${INFO} ${str}..."
if command -v systemctl &> /dev/null; then
systemctl stop "${1}" &> /dev/null || true
@@ -1125,7 +1125,7 @@ stop_service() {
# Start/Restart service passed in as argument
start_service() {
# Local, named variables
- local str="Starting ${1} service"
+ local str="Starting ${1} service"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1142,7 +1142,7 @@ start_service() {
# Enable service so that it will start with next reboot
enable_service() {
# Local, named variables
- local str="Enabling ${1} service to start on reboot"
+ local str="Enabling ${1} service to start on reboot"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1159,7 +1159,7 @@ enable_service() {
# Disable service so that it will not with next reboot
disable_service() {
# Local, named variables
- local str="Disabling ${1} service"
+ local str="Disabling ${1} service"
echo -ne " ${INFO} ${str}..."
# If systemctl exists,
if command -v systemctl &> /dev/null; then
@@ -1177,11 +1177,11 @@ check_service_active() {
# If systemctl exists,
if command -v systemctl &> /dev/null; then
# use that to check the status of the service
- systemctl is-enabled "${1}" > /dev/null
+ systemctl is-enabled "${1}" > /dev/null
# Otherwise,
else
# fall back to service command
- service "${1}" status > /dev/null
+ service "${1}" status > /dev/null
fi
}
@@ -1787,13 +1787,13 @@ FTLinstall() {
local ftlBranch
local url
local ftlBranch
-
+
if [[ -f "/etc/pihole/ftlbranch" ]];then
ftlBranch=$( /dev/null || { echo "Unable to return to original directory after FTL binary download."; return 1; }
@@ -1926,9 +1926,9 @@ FTLdetect() {
echo -e " ${INFO} Checking for existing FTL binary..."
local ftlLoc=$(which pihole-FTL 2>/dev/null)
-
+
local ftlBranch
-
+
if [[ -f "/etc/pihole/ftlbranch" ]];then
ftlBranch=$(/dev/null) ]]; then
- if pihole-FTL --resolver > /dev/null; then
+ if pihole-FTL --resolver > /dev/null; then
stop_service pihole-FTL
else
stop_service dnsmasq
@@ -2185,7 +2185,7 @@ main() {
echo -e " ${INFO} Restarting services..."
# Start services
# Only start and enable dnsmasq if FTL does not have the --resolver switch
- if ! pihole-FTL --resolver > /dev/null; then
+ if ! pihole-FTL --resolver > /dev/null; then
start_service dnsmasq
enable_service dnsmasq
fi
From 11f342587656937f0baa8960cbd785994ceeaaec Mon Sep 17 00:00:00 2001
From: Jacob Salmela
Date: Thu, 22 Mar 2018 23:51:12 -0500
Subject: [PATCH 037/158] update donation and affiliate links. also link to
trademark guidelines. update an image. and add a project.
Signed-off-by: Jacob Salmela
---
README.md | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index b7f4f249..b5e24378 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
Network-wide ad blocking via your own Linux hardware
-The Pi-hole is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
+The Pi-hole[®](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
- **Easy-to-install**: our versatile installer walks you through the process, and [takes less than ten minutes](https://www.youtube.com/watch?v=vKWjx1AQYgs)
- **Resolute**: content is blocked in _non-browser locations_, such as ad-laden mobile apps and smart TVs
@@ -27,7 +27,7 @@ Those who want to get started quickly and conveniently, may install Pi-hole usin
#### `curl -sSL https://install.pi-hole.net | bash`
## Alternative Install Methods
-[Piping to `bash` is controversial](https://pi-hole.net/2016/07/25/curling-and-piping-to-bash), as it prevents you from [reading code that is about to run](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) on your system. Therefore, we provide these alternative installation methods which allow code review before installation:
+[Piping to `bash` is controversial](https://pi-hole.net/2016/07/25/curling-and-piping-to-bash), as it prevents you from [reading code that is about to run](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) on your system. Therefore, we provide these alternative installation methods which allow code review before installation:
### Method 1: Clone our repository and run
```
@@ -60,16 +60,21 @@ Make no mistake: **your support is absolutely vital to help keep us innovating!*
### Donations
Sending a donation using our links below is **extremely helpful** in offsetting a portion of our monthly expenses:
- Donate via PayPal
- Bitcoin Address: 1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL
+- Donate via PayPal
+- [Bitcoin](https://commerce.coinbase.com/checkout/fb7facaf-bebd-46be-bb77-b358f4546763): 1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL
+- [Bitcoin Cash](https://commerce.coinbase.com/checkout/fb7facaf-bebd-46be-bb77-b358f4546763): qqh25hlmqaj99xraw00e47xmf8sysnyxhyww2d7dnh
+- [Ethereum](https://commerce.coinbase.com/checkout/fb7facaf-bebd-46be-bb77-b358f4546763): 0xF00aF43d2431BAD585056492b310e48eC40D87e8
### Alternative support
-If you'd rather not donate (_which is okay!_), there are other ways you can help support us:
+If you'd rather not [donate](https://pi-hole.net/donate/) (_which is okay!_), there are other ways you can help support us:
-- [Digital Ocean](http://www.digitalocean.com/?refcode=344d234950e1) affiliate link
-- [Vultr](http://www.vultr.com/?ref=7190426) affiliate link
-- [UNIXstickers.com](http://unixstickers.refr.cc/jacobs) affiliate link
-- [Pi-hole Swag Store](https://pi-hole.net/shop/)
+- [Digital Ocean](http://www.digitalocean.com/?refcode=344d234950e1) _affiliate link_
+- [UNIXstickers.com](http://unixstickers.refr.cc/jacobs) _save $5 when you spend $9 using our affiliate link_
+- [Pi-hole Swag Store](https://pi-hole.net/shop/) _affiliate link_
+- [Amazon](http://www.amazon.com/exec/obidos/redirect-home/pihole09-20) _affiliate link_
+- [Ho-ost](https://clients.ho-ost.com/aff.php?aff=19) _save 50% with our affiliate link_
+- [DNS Made Easy](https://cp.dnsmadeeasy.com/u/133706) _affiliate link_
+- [Vultr](http://www.vultr.com/?ref=7190426) _affiliate link_
- Spreading the word about our software, and how you have benefited from it
### Contributing via GitHub
@@ -127,7 +132,7 @@ You can read our [Core Feature Breakdown](https://github.com/pi-hole/pi-hole/wik
### The Web Interface Dashboard
This [optional dashboard](https://github.com/pi-hole/AdminLTE) allows you to view stats, change settings, and configure your Pi-hole. It's the power of the Command Line Interface, with none of the learning curve!
-
+
Some notable features include:
* Mobile friendly interface
@@ -145,8 +150,8 @@ There are several ways to [access the dashboard](https://discourse.pi-hole.net/t
2. `http:/pi.hole/admin/` (when using Pi-hole as your DNS server)
3. `http://pi.hole/` (when using Pi-hole as your DNS server)
-## The Faster-Than-Light Engine
-The [FTL Engine](https://github.com/pi-hole/FTL) is a lightweight, purpose-built daemon used to provide statistics needed for the Web Interface, and its API can be easily integrated into your own projects. As the name implies, FTL does this all *very quickly*!
+## Faster-than-light Engine
+The FTLDNS[â„¢](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a lightweight, purpose-built daemon used to provide statistics needed for the Web Interface, and its API can be easily integrated into your own projects. As the name implies, FTLDNS does this all *very quickly*!
Some of the statistics you can integrate include:
* Total number of domains being blocked
@@ -194,6 +199,7 @@ While quite outdated at this point, [this original blog post about Pi-hole](http
- [Magic Mirror with DNS Filtering](https://zonksec.com/blog/magic-mirror-dns-filtering/#dnssoftware)
- [Pi-hole Droid: Android client](https://github.com/friimaind/pi-hole-droid)
- [Windows DNS Swapper](https://github.com/roots84/DNS-Swapper), see [#1400](https://github.com/pi-hole/pi-hole/issues/1400)
+- [Pi-hole Visualizer](https://www.reddit.com/r/pihole/comments/82ikgb/pihole_visualizer_update/)
-----
## Coverage
From 7159ecb632dc623b0cd854e0dd4e372464fb14c0 Mon Sep 17 00:00:00 2001
From: Jacob Salmela
Date: Fri, 23 Mar 2018 00:11:21 -0500
Subject: [PATCH 038/158] reduce ping times for faster script completion
Signed-off-by: Jacob Salmela
---
advanced/Scripts/piholeDebug.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh
index b668af94..d2e8951b 100755
--- a/advanced/Scripts/piholeDebug.sh
+++ b/advanced/Scripts/piholeDebug.sh
@@ -592,7 +592,7 @@ ping_gateway() {
# Try to quietly ping the gateway 3 times, with a timeout of 3 seconds, using numeric output only,
# on the pihole interface, and tail the last three lines of the output
# If pinging the gateway is not successful,
- if ! ${cmd} -c 3 -W 2 -n ${gateway} -I ${PIHOLE_INTERFACE} >/dev/null; then
+ if ! ${cmd} -c 1 -W 2 -n ${gateway} -I ${PIHOLE_INTERFACE} >/dev/null; then
# let the user know
log_write "${CROSS} ${COL_RED}Gateway did not respond.${COL_NC} ($FAQ_GATEWAY)\n"
# and return an error code
@@ -613,7 +613,7 @@ ping_internet() {
ping_ipv4_or_ipv6 "${protocol}"
log_write "* Checking Internet connectivity via IPv${protocol}..."
# Try to ping the address 3 times
- if ! ${cmd} -W 2 -c 3 -n ${public_address} -I ${PIHOLE_INTERFACE} >/dev/null; then
+ if ! ${cmd} -c 1 -W 2 -n ${public_address} -I ${PIHOLE_INTERFACE} >/dev/null; then
# if it's unsuccessful, show an error
log_write "${CROSS} ${COL_RED}Cannot reach the Internet.${COL_NC}\n"
return 1
From 51765b1f659a5fe5023bb0c2001ebce4ed8be861 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Fri, 23 Mar 2018 10:15:40 +0000
Subject: [PATCH 039/158] chown pihole log to pihole:pihole, rather than
pihole:root
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index a5d52309..c2e44843 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1323,7 +1323,7 @@ CreateLogFile() {
# set the permissions,
chmod 644 /var/log/pihole.log
# and owners
- chown pihole:root /var/log/pihole.log
+ chown pihole:pihole /var/log/pihole.log
echo -e "${OVER} ${TICK} ${str}"
# Otherwise,
else
From 238a56cac3a0ca958900e4e465ed97b5e326ff77 Mon Sep 17 00:00:00 2001
From: Adam Warner
Date: Fri, 23 Mar 2018 10:53:22 +0000
Subject: [PATCH 040/158] Remove CreateLogFile function, as this is handled by
the FTL service
Signed-off-by: Adam Warner
---
automated install/basic-install.sh | 27 +--------------------------
1 file changed, 1 insertion(+), 26 deletions(-)
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index c2e44843..01a1aff0 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -1311,27 +1311,6 @@ install_dependent_packages() {
return 0
}
-# Create logfiles if necessary
-CreateLogFile() {
- local str="Creating log and changing owner to pihole"
- echo ""
- echo -ne " ${INFO} ${str}..."
- # If the pihole log does not exist,
- if [[ ! -f "/var/log/pihole.log" ]]; then
- # Make it,
- touch /var/log/pihole.log
- # set the permissions,
- chmod 644 /var/log/pihole.log
- # and owners
- chown pihole:pihole /var/log/pihole.log
- echo -e "${OVER} ${TICK} ${str}"
- # Otherwise,
- else
- # the file should already exist
- echo -e " ${COL_LIGHT_GREEN}log already exists!${COL_NC}"
- fi
-}
-
# Install the Web interface dashboard
installPiholeWeb() {
echo ""
@@ -1577,8 +1556,6 @@ installPihole() {
installScripts
# configs,
installConfigs
- # and create the log file
- CreateLogFile
# If the user wants to install the dashboard,
if [[ "${INSTALL_WEB}" == true ]]; then
# do so
@@ -1614,9 +1591,7 @@ updatePihole() {
# Install base files and web interface
installScripts
# Install config files
- installConfigs
- # Create the log file
- CreateLogFile
+ installConfigs
# If the user wants to install the dasboard,
if [[ "${INSTALL_WEB}" == true ]]; then
# do so
From d9d3caec22e597d0b12ad9006bc1b9576c52a19f Mon Sep 17 00:00:00 2001
From: Jacob Salmela
Date: Fri, 23 Mar 2018 06:56:40 -0500
Subject: [PATCH 041/158] new head tail function and get head tail of
pihole-FTL.log instead of just head
Signed-off-by: Jacob Salmela
---
advanced/Scripts/piholeDebug.sh | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh
index d2e8951b..e1eb722b 100755
--- a/advanced/Scripts/piholeDebug.sh
+++ b/advanced/Scripts/piholeDebug.sh
@@ -958,7 +958,7 @@ list_files_in_dir() {
"${PIHOLE_WEB_SERVER_ERROR_LOG_FILE}") make_array_from_file "${dir_to_parse}/${each_file}" 25
;;
# Same for the FTL log
- "${PIHOLE_FTL_LOG}") make_array_from_file "${dir_to_parse}/${each_file}" 25
+ "${PIHOLE_FTL_LOG}") head_tail_log "${dir_to_parse}/${each_file}" 35
;;
# parse the file into an array in case we ever need to analyze it line-by-line
*) make_array_from_file "${dir_to_parse}/${each_file}";
@@ -991,6 +991,34 @@ show_content_of_pihole_files() {
show_content_of_files_in_dir "${LOG_DIRECTORY}"
}
+head_tail_log() {
+ # The file being processed
+ local filename="${1}"
+ # The number of lines to use for head and tail
+ local qty="${2}"
+ local head_line
+ local tail_line
+ # Put the current Internal Field Separator into another variable so it can be restored later
+ OLD_IFS="$IFS"
+ # Get the lines that are in the file(s) and store them in an array for parsing later
+ IFS=$'\r\n'
+ local log_head=()
+ log_head=( $(head -n ${qty} ${filename}) )
+ log_write " ${COL_CYAN}-----head of $(basename ${filename})------${COL_NC}"
+ for head_line in "${log_head[@]}"; do
+ log_write " ${head_line}"
+ done
+ log_write ""
+ local log_tail=()
+ log_tail=( $(tail -n ${qty} ${filename}) )
+ log_write " ${COL_CYAN}-----tail of $(basename ${filename})------${COL_NC}"
+ for tail_line in "${log_tail[@]}"; do
+ log_write " ${tail_line}"
+ done
+ # Set the IFS back to what it was
+ IFS="$OLD_IFS"
+}
+
analyze_gravity_list() {
echo_current_diagnostic "Gravity list"
local head_line
From bfcbd72e4b021b458be3b45ac442f4350ac1603a Mon Sep 17 00:00:00 2001
From: "Leo MG Nesfield (LMGN)"
Date: Fri, 23 Mar 2018 16:17:31 +0000
Subject: [PATCH 042/158] Link to the admin panel on the splash page.
---
advanced/index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/advanced/index.php b/advanced/index.php
index 999acebb..5aa9fbcb 100644
--- a/advanced/index.php
+++ b/advanced/index.php
@@ -64,7 +64,7 @@ if ($serverName === "pi.hole") {
$viewPort
- Pi-hole: Your black hole for Internet advertisements
+ Pi-hole: Your black hole for Internet advertisements Did you mean to go to the admin panel?