diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 8e19e550..d19df5ab 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- distro: [debian_9, debian_10, ubuntu_16, ubuntu_18, ubuntu_20, centos_7, centos_8, fedora_31, fedora_32]
+ distro: [debian_9, debian_10, ubuntu_16, ubuntu_18, ubuntu_20, centos_7, centos_8, fedora_32, fedora_33]
env:
DISTRO: ${{matrix.distro}}
steps:
diff --git a/README.md b/README.md
index 6d7e5b5e..57dee16d 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
+#
+
@@ -9,8 +11,6 @@
-#
-
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.
- **Easy-to-install**: our versatile installer walks you through the process, and takes less than ten minutes
@@ -26,8 +26,6 @@ The Pi-holeĀ® is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) th
-----
-Master [![Build Status](https://travis-ci.com/pi-hole/pi-hole.svg?branch=master)](https://travis-ci.com/pi-hole/pi-hole) Development [![Build Status](https://travis-ci.com/pi-hole/pi-hole.svg?branch=development)](https://travis-ci.com/pi-hole/pi-hole)
-
## One-Step Automated Install
Those who want to get started quickly and conveniently may install Pi-hole using the following command:
@@ -71,16 +69,18 @@ Make no mistake: **your support is absolutely vital to help keep us innovating!*
### [Donations](https://pi-hole.net/donate)
-Sending a donation using our Sponsor Button is **extremely helpful** in offsetting a portion of our monthly expenses:
+Sending a donation using our Sponsor Button is **extremely helpful** in offsetting a portion of our monthly expenses and rewarding our dedicated development team:
### Alternative support
If you'd rather not donate (_which is okay!_), there are other ways you can help support us:
-- [Patreon](https://patreon.com/pihole) _Become a patron for rewards_
+- [GitHub Sponsors](https://github.com/sponsors/pi-hole/)
+- [Patreon](https://patreon.com/pihole)
+- [Hetzner Cloud](https://hetzner.cloud/?ref=7aceisRX3AzA) _affiliate link_
- [Digital Ocean](https://www.digitalocean.com/?refcode=344d234950e1) _affiliate link_
- [Stickermule](https://www.stickermule.com/unlock?ref_id=9127301701&utm_medium=link&utm_source=invite) _earn a $10 credit after your first purchase_
-- [Amazon](http://www.amazon.com/exec/obidos/redirect-home/pihole09-20) _affiliate link_
+- [Amazon US](http://www.amazon.com/exec/obidos/redirect-home/pihole09-20) _affiliate link_
- Spreading the word about our software, and how you have benefited from it
### Contributing via GitHub
@@ -95,7 +95,9 @@ You'll find that the [install script](https://github.com/pi-hole/pi-hole/blob/ma
## Getting in touch with us
-While we are primarily reachable on our [Discourse User Forum](https://discourse.pi-hole.net/), we can also be found on a variety of social media outlets. **Please be sure to check the FAQ's** before starting a new discussion, as we do not have the spare time to reply to every request for assistance.
+While we are primarily reachable on our [Discourse User Forum](https://discourse.pi-hole.net/), we can also be found on a variety of social media outlets.
+
+**Please be sure to check the FAQ's** before starting a new discussion. Many user questions already have answers and can be solved without any additional assistance.
- [Frequently Asked Questions](https://discourse.pi-hole.net/c/faqs)
- [Feature Requests](https://discourse.pi-hole.net/c/feature-requests?order=votes)
@@ -106,12 +108,27 @@ While we are primarily reachable on our [Discourse User Forum](https://discourse
## Breakdown of Features
+### [Faster-than-light Engine](https://github.com/pi-hole/ftl)
+
+[FTLDNS](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, FTLDNS does this all *very quickly*!
+
+Some of the statistics you can integrate include:
+
+- Total number of domains being blocked
+- Total number of DNS queries today
+- Total number of ads blocked today
+- Percentage of ads blocked
+- Unique domains
+- Queries forwarded (to your chosen upstream DNS server)
+- Queries cached
+- Unique clients
+
+The API can be accessed via [`telnet`](https://github.com/pi-hole/FTL), the Web (`admin/api.php`) and Command Line (`pihole -c -j`). You can find out [more details over here](https://discourse.pi-hole.net/t/pi-hole-api/1863).
+
### The Command Line Interface
The [pihole](https://docs.pi-hole.net/core/pihole-command/) command has all the functionality necessary to be able to fully administer the Pi-hole, without the need of the Web Interface. It's fast, user-friendly, and auditable by anyone with an understanding of `bash`.
-![Pi-hole Blacklist Demo](https://pi-hole.github.io/graphics/Screenshots/blacklist-cli.gif)
-
Some notable features include:
- [Whitelisting, Blacklisting and Regex](https://docs.pi-hole.net/core/pihole-command/#whitelisting-blacklisting-and-regex)
@@ -128,8 +145,6 @@ You can read our [Core Feature Breakdown](https://docs.pi-hole.net/core/pihole-c
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!
-![Pi-hole Dashboard](https://pi-hole.github.io/graphics/Screenshots/pihole-dashboard.png)
-
Some notable features include:
- Mobile friendly interface
@@ -145,21 +160,3 @@ There are several ways to [access the dashboard](https://discourse.pi-hole.net/t
1. `http://pi.hole/admin/` (when using Pi-hole as your DNS server)
2. `http:///admin/`
-3. `http://pi.hole/` (when using Pi-hole as your DNS server)
-
-## Faster-than-light Engine
-
-FTLDNS 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
-- Total number of DNS queries today
-- Total number of ads blocked today
-- Percentage of ads blocked
-- Unique domains
-- Queries forwarded (to your chosen upstream DNS server)
-- Queries cached
-- Unique clients
-
-The API can be accessed via [`telnet`](https://github.com/pi-hole/FTL), the Web (`admin/api.php`) and Command Line (`pihole -c -j`). You can find out [more details over here](https://discourse.pi-hole.net/t/pi-hole-api/1863).
diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh
index 53f815c5..8ef4d940 100755
--- a/advanced/Scripts/webpage.sh
+++ b/advanced/Scripts/webpage.sh
@@ -564,7 +564,13 @@ AddDHCPStaticAddress() {
RemoveDHCPStaticAddress() {
mac="${args[2]}"
- sed -i "/dhcp-host=${mac}.*/d" "${dhcpstaticconfig}"
+ if [[ "$mac" =~ ^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$ ]]; then
+ sed -i "/dhcp-host=${mac}.*/d" "${dhcpstaticconfig}"
+ else
+ echo " ${CROSS} Invalid Mac Passed!"
+ exit 1
+ fi
+
}
SetAdminEmail() {
@@ -708,7 +714,13 @@ RemoveCustomDNSAddress() {
ip="${args[2]}"
host="${args[3]}"
- sed -i "/${ip} ${host}/d" "${dnscustomfile}"
+
+ if valid_ip "${ip}" || valid_ip6 "${ip}" ; then
+ sed -i "/${ip} ${host}/d" "${dnscustomfile}"
+ else
+ echo -e " ${CROSS} Invalid IP has been passed"
+ exit 1
+ fi
# Restart dnsmasq to update removed custom DNS entries
RestartDNS
@@ -719,6 +731,7 @@ AddCustomCNAMERecord() {
domain="${args[2]}"
target="${args[3]}"
+
echo "cname=${domain},${target}" >> "${dnscustomcnamefile}"
# Restart dnsmasq to load new custom CNAME records
@@ -730,7 +743,20 @@ RemoveCustomCNAMERecord() {
domain="${args[2]}"
target="${args[3]}"
- sed -i "/cname=${domain},${target}/d" "${dnscustomcnamefile}"
+
+ validDomain="$(checkDomain "${domain}")"
+ if [[ -n "${validDomain}" ]]; then
+ validTarget="$(checkDomain "${target}")"
+ if [[ -n "${validDomain}" ]]; then
+ sed -i "/cname=${validDomain},${validTarget}/d" "${dnscustomcnamefile}"
+ else
+ echo " ${CROSS} Invalid Target Passed!"
+ exit 1
+ fi
+ else
+ echo " ${CROSS} Invalid Domain passed!"
+ exit 1
+ fi
# Restart dnsmasq to update removed custom CNAME records
RestartDNS
diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh
index 78bc0882..07683204 100755
--- a/automated install/basic-install.sh
+++ b/automated install/basic-install.sh
@@ -999,9 +999,14 @@ setStaticIPv4() {
# If an ifcfg config does not exists for the interface name, search for one based on the connection name via network manager
if is_command nmcli && nmcli general status &> /dev/null; then
CONNECTION_NAME=$(nmcli dev show "${PIHOLE_INTERFACE}" | grep 'GENERAL.CONNECTION' | cut -d: -f2 | sed 's/^System//' | xargs | tr ' ' '_')
- if [[ -f "/etc/sysconfig/network-scripts/ifcfg-${CONNECTION_NAME}" ]];then
- # If it exists, then we can configure using IFCFG
- IFCFG_FILE=/etc/sysconfig/network-scripts/ifcfg-${CONNECTION_NAME}
+ IFCFG_FILE=/etc/sysconfig/network-scripts/ifcfg-${CONNECTION_NAME}
+ if [[ -f "${IFCFG_FILE}" ]];then
+ # If it exists,
+ setIFCFG "${IFCFG_FILE}"
+ return 0
+ else
+ printf " %b Warning: sysconfig network script not found. Creating ${IFCFG_FILE}\\n" "${INFO}"
+ touch "${IFCFG_FILE}"
setIFCFG "${IFCFG_FILE}"
return 0
fi
diff --git a/pihole b/pihole
index 2b2b7bc2..f8085c8e 100755
--- a/pihole
+++ b/pihole
@@ -16,6 +16,7 @@ readonly PI_HOLE_SCRIPT_DIR="/opt/pihole"
# error due to modifying a readonly variable.
setupVars="/etc/pihole/setupVars.conf"
PI_HOLE_BIN_DIR="/usr/local/bin"
+readonly FTL_PID_FILE="/run/pihole-FTL.pid"
readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE"
source "${colfile}"
@@ -98,8 +99,25 @@ versionFunc() {
exit 0
}
+# Get PID of main pihole-FTL process
+getFTLPID() {
+ local pid
+
+ if [ -s "${FTL_PID_FILE}" ]; then
+ # -s: FILE exists and has a size greater than zero
+ pid="$(<"$FTL_PID_FILE")"
+ # Exploit prevention: unset the variable if there is malicious content
+ # Verify that the value read from the file is numeric
+ [[ "$pid" =~ [^[:digit:]] ]] && unset pid
+ fi
+
+ # If FTL is not running, or the PID file contains malicious stuff, substitute
+ # negative PID to signal this to the caller
+ echo "${pid:=-1}"
+}
+
restartDNS() {
- local svcOption svc str output status
+ local svcOption svc str output status pid icon
svcOption="${1:-restart}"
# Determine if we should reload or restart
@@ -108,17 +126,34 @@ restartDNS() {
# Note 1: This will NOT re-read any *.conf files
# Note 2: We cannot use killall here as it does
# not know about real-time signals
- svc="pkill -RTMIN pihole-FTL"
- str="Reloading DNS lists"
+ pid="$(getFTLPID)"
+ if [[ "$pid" -eq "-1" ]]; then
+ svc="true"
+ str="FTL is not running"
+ icon="${INFO}"
+ else
+ svc="kill -RTMIN ${pid}"
+ str="Reloading DNS lists"
+ icon="${TICK}"
+ fi
elif [[ "${svcOption}" =~ "reload" ]]; then
# Reloading of the DNS cache has been requested
# Note: This will NOT re-read any *.conf files
- svc="pkill -HUP pihole-FTL"
- str="Flushing DNS cache"
+ pid="$(getFTLPID)"
+ if [[ "$pid" -eq "-1" ]]; then
+ svc="true"
+ str="FTL is not running"
+ icon="${INFO}"
+ else
+ svc="kill -HUP ${pid}"
+ str="Flushing DNS cache"
+ icon="${TICK}"
+ fi
else
# A full restart has been requested
svc="service pihole-FTL restart"
str="Restarting DNS server"
+ icon="${TICK}"
fi
# Print output to Terminal, but not to Web Admin
@@ -128,7 +163,7 @@ restartDNS() {
status="$?"
if [[ "${status}" -eq 0 ]]; then
- [[ -t 1 ]] && echo -e "${OVER} ${TICK} ${str}"
+ [[ -t 1 ]] && echo -e "${OVER} ${icon} ${str}"
return 0
else
[[ ! -t 1 ]] && local OVER=""
diff --git a/supportedos.txt b/supportedos.txt
index 1eb1fde6..6d579132 100644
--- a/supportedos.txt
+++ b/supportedos.txt
@@ -1,5 +1,5 @@
Raspbian=9,10
Ubuntu=16,18,20
Debian=9,10
-Fedora=31,32
+Fedora=32,33
CentOS=7,8
\ No newline at end of file
diff --git a/test/_fedora_31.Dockerfile b/test/_fedora_33.Dockerfile
similarity index 96%
rename from test/_fedora_31.Dockerfile
rename to test/_fedora_33.Dockerfile
index 02dcb733..0a1ac59c 100644
--- a/test/_fedora_31.Dockerfile
+++ b/test/_fedora_33.Dockerfile
@@ -1,4 +1,4 @@
-FROM fedora:31
+FROM fedora:33
ENV GITDIR /etc/.pihole
ENV SCRIPTDIR /opt/pihole
diff --git a/test/tox.fedora_31.ini b/test/tox.fedora_33.ini
similarity index 78%
rename from test/tox.fedora_31.ini
rename to test/tox.fedora_33.ini
index 36ab10ad..00ea732a 100644
--- a/test/tox.fedora_31.ini
+++ b/test/tox.fedora_33.ini
@@ -4,5 +4,5 @@ envlist = py37
[testenv]
whitelist_externals = docker
deps = -rrequirements.txt
-commands = docker build -f _fedora_31.Dockerfile -t pytest_pihole:test_container ../
+commands = docker build -f _fedora_33.Dockerfile -t pytest_pihole:test_container ../
pytest {posargs:-vv -n auto} ./test_automated_install.py ./test_centos_fedora_common_support.py ./test_fedora_support.py