Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pi-hole/pi-hole.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'advanced/Scripts/utils.sh')
-rwxr-xr-xadvanced/Scripts/utils.sh77
1 files changed, 70 insertions, 7 deletions
diff --git a/advanced/Scripts/utils.sh b/advanced/Scripts/utils.sh
index 887816cc..f0a7cc37 100755
--- a/advanced/Scripts/utils.sh
+++ b/advanced/Scripts/utils.sh
@@ -1,4 +1,6 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
+# shellcheck disable=SC3043 #https://github.com/koalaman/shellcheck/wiki/SC3043#exceptions
+
# Pi-hole: A black hole for Internet advertisements
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
@@ -15,21 +17,82 @@
# - New functions must have a test added for them in test/test_any_utils.py
#######################
-# Takes three arguments key, value, and file.
+# Takes Three arguments: file, key, and value.
+#
# Checks the target file for the existence of the key
# - If it exists, it changes the value
# - If it does not exist, it adds the value
#
# Example usage:
-# addOrEditKeyValuePair "BLOCKING_ENABLED" "true" "/etc/pihole/setupVars.conf"
+# addOrEditKeyValPair "/etc/pihole/setupVars.conf" "BLOCKING_ENABLED" "true"
#######################
addOrEditKeyValPair() {
- local key="${1}"
- local value="${2}"
- local file="${3}"
+ local file="${1}"
+ local key="${2}"
+ local value="${3}"
+
if grep -q "^${key}=" "${file}"; then
- sed -i "/^${key}=/c\\${key}=${value}" "${file}"
+ # Key already exists in file, modify the value
+ sed -i "/^${key}=/c\\${key}=${value}" "${file}"
else
+ # Key does not already exist, add it and it's value
echo "${key}=${value}" >> "${file}"
fi
}
+
+#######################
+# Takes two arguments: file, and key.
+# Adds a key to target file
+#
+# Example usage:
+# addKey "/etc/dnsmasq.d/01-pihole.conf" "log-queries"
+#######################
+addKey(){
+ local file="${1}"
+ local key="${2}"
+
+ if ! grep -q "^${key}" "${file}"; then
+ # Key does not exist, add it.
+ echo "${key}" >> "${file}"
+ fi
+}
+
+#######################
+# Takes two arguments: file, and key.
+# Deletes a key or key/value pair from target file
+#
+# Example usage:
+# removeKey "/etc/pihole/setupVars.conf" "PIHOLE_DNS_1"
+#######################
+removeKey() {
+ local file="${1}"
+ local key="${2}"
+ sed -i "/^${key}/d" "${file}"
+}
+
+#######################
+# returns FTL's current telnet API port
+#######################
+getFTLAPIPort(){
+ local FTLCONFFILE="/etc/pihole/pihole-FTL.conf"
+ local DEFAULT_PORT_FILE="/run/pihole-FTL.port"
+ local DEFAULT_FTL_PORT=4711
+ local PORTFILE
+ local ftl_api_port
+
+ if [ -f "$FTLCONFFILE" ]; then
+ # if PORTFILE is not set in pihole-FTL.conf, use the default path
+ PORTFILE="$( (grep "^PORTFILE=" $FTLCONFFILE || echo "$DEFAULT_PORT_FILE") | cut -d"=" -f2-)"
+ fi
+
+ if [ -s "$PORTFILE" ]; then
+ # -s: FILE exists and has a size greater than zero
+ ftl_api_port=$(cat "${PORTFILE}")
+ # Exploit prevention: unset the variable if there is malicious content
+ # Verify that the value read from the file is numeric
+ expr "$ftl_api_port" : "[^[:digit:]]" > /dev/null && unset ftl_api_port
+ fi
+
+ # echo the port found in the portfile or default to the default port
+ echo "${ftl_api_port:=$DEFAULT_FTL_PORT}"
+}