]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
unbound: Update forwarders when system connects/disconnects
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 Jan 2020 15:21:59 +0000 (15:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 Jan 2020 15:21:59 +0000 (15:21 +0000)
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/initscripts/system/unbound

index bb78fd18aeaba10259eac28e3c80a445dfbdb7ce..a5c56d55870e9df549432dbc83cb55caf16bfa7b 100644 (file)
@@ -28,10 +28,27 @@ ip_address_revptr() {
 }
 
 read_name_servers() {
-       local i
-       for i in 1 2; do
-               echo "$(</var/ipfire/red/dns${i})"
-       done 2>/dev/null | xargs echo
+       # Read name servers from ISP
+       if [ "${USE_ISP_NAMESERVERS}" = "on" -a "${PROTO}" != "TLS" ]; then
+               local i
+               for i in 1 2; do
+                       echo "$(</var/run/dns${i})"
+               done 2>/dev/null
+       fi
+
+       # Read configured name servers
+       local id address tls_hostname enabled remark
+       while IFS="," read -r id address tls_hostname enabled remark; do
+               [ "${enabled}" != "enabled" ] && continue
+
+               if [ "${PROTO}" = "TLS" ]; then
+                       if [ -n "${tls_hostname}" ]; then
+                               echo "${address}@853#${tls_hostname}"
+                       fi
+               else
+                       echo "${address}"
+               fi
+       done < /var/ipfire/dns/servers
 }
 
 check_red_has_carrier_and_ip() {
@@ -166,20 +183,10 @@ write_forward_conf() {
                fi
 
                # Add upstream name servers
-               local id address tls_hostname enabled remark
-               while IFS="," read -r id address tls_hostname enabled remark; do
-                       # Skip disabled servers
-                       [ "${enabled}" != "enabled" ] && continue
-
-                       # Set DNS server
-                       if [ "${PROTO}" = "TLS" ]; then
-                               if [ -n "${tls_hostname}" ]; then
-                                       echo "  forward-addr: ${address}@853#${tls_hostname}"
-                               fi
-                       else
-                               echo "  forward-addr: ${address}"
-                       fi
-               done < /var/ipfire/dns/servers
+               local ns
+               for ns in $(read_name_servers); do
+                       echo "  forward-addr: ${ns}"
+               done
        ) > /etc/unbound/forward.conf
 }
 
@@ -293,6 +300,19 @@ resolve() {
        done
 }
 
+update_forwarders() {
+       # DO nothing when we do not use the ISP name servers
+       [ "${USE_ISP_NAMESERVERS}" != "on" ] && return 0
+
+       # Update unbound about the new servers
+       local nameservers=( $(read_name_servers) )
+       if [ -n "${nameservers[*]}" ]; then
+               unbound-control -q forward "${nameservers[@]}"
+       else
+               unbound-control -q forward off
+       fi
+}
+
 # Sets up Safe Search for various search engines
 update_safe_search() {
        local google_tlds=(
@@ -593,14 +613,14 @@ case "$1" in
                ;;
 
        update-forwarders)
-               : # XXX must set ISP name servers if necessary
+               update_forwarders
 
                # Update Safe Search settings
                update_safe_search
                ;;
 
        remove-forwarders)
-               : # XXX must remove ISP name servers
+               update_forwarders
                ;;
 
        resolve)