]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
convert-dns-settings: Import all possible PPP dialin profiles.
authorStefan Schantl <stefan.schantl@ipfire.org>
Sat, 18 Jan 2020 09:03:06 +0000 (10:03 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Sun, 19 Jan 2020 12:24:23 +0000 (12:24 +0000)
* Avoid from adding the same imported DNS server multiple times.

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
src/scripts/convert-dns-settings

index 04a5344f7e44de703959b4fc7ba2810cdd906f64..e9d4de86baac587a81b180f9165895b4cb70f25c 100755 (executable)
 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