convert-dns-settings: Import all possible PPP dialin profiles.

Message ID 20200118090306.2991-1-stefan.schantl@ipfire.org
State Accepted
Commit dcc655efb8620b760d4b414203a54845ac9bbe34
Headers
Series convert-dns-settings: Import all possible PPP dialin profiles. |

Commit Message

Stefan Schantl Jan. 18, 2020, 9:03 a.m. UTC
  * Avoid from adding the same imported DNS server multiple times.

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
 src/scripts/convert-dns-settings | 44 ++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 10 deletions(-)
  

Patch

diff --git a/src/scripts/convert-dns-settings b/src/scripts/convert-dns-settings
index 04a5344f7..e9d4de86b 100755
--- a/src/scripts/convert-dns-settings
+++ b/src/scripts/convert-dns-settings
@@ -22,25 +22,49 @@ 
 main() {
 	# Do not convert anything if we already have some servers set
 	if [ ! -s "/var/ipfire/dns/servers" ]; then
-		local DNS0 DNS1 DNS2
+		# Array to store all found DNS servers.
+		SERVERS=()
+
+		# Try to get the DNS servers from ethernet settings file.
+		local DNS1 DNS2
 		eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
 
+		# Add the grabbed DNS servers to the servers array.
+		SERVERS+=($DNS1 $DNS2)
+
+		# Check if the ppp settings file is not empty.
 		if [ -s "/var/ipfire/ppp/settings" ]; then
-			eval $(/usr/local/bin/readhash /var/ipfire/ppp/settings)
+			# Loop though all profile files.
+			for file in /var/ipfire/ppp/settings*; do
+				local DNS1 DNS2
+				eval $(/usr/local/bin/readhash $file)
+
+				# Add the DNS servers to the array of SERVERS.
+				for var in DNS1 DNS2; do
+					local server="${!var}"
+
+					# Check if the current server is allready part
+					# of the array.
+					for element in "${SERVERS[@]}"; do
+						[[ $element == $server ]] && continue
+					done
+
+					SERVERS+=($server)
+				done
+
+				# Remove DNS1 and DNS2 settings from profile file.
+				sed -i "/^DNS[12]?=/d" $file
+			done
 
-			# Remove DNS, DNS1 and DNS2
-			sed -i "/^DNS[12]?=/d" /var/ipfire/ppp/settings
 		elif [ -s "/var/ipfire/dns/settings" ]; then
 			eval $(/usr/local/bin/readhash /var/ipfire/dns/settings)
 		fi
 
-		local var
+		local server
 		local i=3
-		for var in DNS0 DNS1 DNS2; do
-			if [ -n "${!var}" ]; then
-				echo "${i},${!var},,enabled,"
-				(( i++ ))
-			fi
+		for server in "${SERVERS[@]}"; do
+			echo "${i},${server},,enabled,"
+			(( i++ ))
 		done > /var/ipfire/dns/servers
 
 		# Empty the old settings file