diff --git a/external/bsd/openresolv/dist/dnsmasq.in b/external/bsd/openresolv/dist/dnsmasq.in index 16220a299500..e9d1f5183fd1 100644 --- a/external/bsd/openresolv/dist/dnsmasq.in +++ b/external/bsd/openresolv/dist/dnsmasq.in @@ -28,7 +28,7 @@ [ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 . "@SYSCONFDIR@/resolvconf.conf" || exit 1 -[ -z "$dnsmasq_conf" -o -z "$dnsmasq_resolv" ] && exit 0 +[ -z "$dnsmasq_conf" -a -z "$dnsmasq_resolv" ] && exit 0 [ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" : ${dnsmasq_pid:=/var/run/dnsmasq.pid} @@ -90,27 +90,32 @@ for d in $DOMAINS; do done changed=false -if [ ! -f "$dnsmasq_conf" ] || \ - [ "$(cat "$dnsmasq_conf")" != "$(printf "$newconf")" ] -then - changed=true - printf "$newconf" >"$dnsmasq_conf" -fi -if [ -f "$dnsmasq_resolv" ]; then - if [ "$(cat "$dnsmasq_resolv")" != "$(printf "$newresolv")" ]; then +if [ -n "$dnsmasq_conf" ]; then + if [ ! -f "$dnsmasq_conf" ] || \ + [ "$(cat "$dnsmasq_conf")" != "$(printf "$newconf")" ] + then changed=true + printf "$newconf" >"$dnsmasq_conf" + fi +fi +if [ -n "$dnsmasq_resolv" ]; then + if [ -f "$dnsmasq_resolv" ]; then + if [ "$(cat "$dnsmasq_resolv")" != "$(printf "$newresolv")" ] + then + changed=true + printf "$newresolv" >"$dnsmasq_resolv" + fi + else + # dnsmasq polls this file so no need to set changed=true printf "$newresolv" >"$dnsmasq_resolv" fi -else - # dnsmasq polls this file so no need to set changed=true - printf "$newresolv" >"$dnsmasq_resolv" fi if $changed; then eval $dnsmasq_restart fi if $dbus; then - $restart || kill -HUP $(cat "$dnsmasq_pid") + $changed || kill -HUP $(cat "$dnsmasq_pid") # Send even if empty so old servers are cleared dbus-send --system --dest=uk.org.thekelleys.dnsmasq \ /uk/org/thekelleys/dnsmasq uk.org.thekelleys.SetServers \ diff --git a/external/bsd/openresolv/dist/libc.in b/external/bsd/openresolv/dist/libc.in index 0037ef020d38..4ed75a2eaebe 100644 --- a/external/bsd/openresolv/dist/libc.in +++ b/external/bsd/openresolv/dist/libc.in @@ -154,8 +154,12 @@ eval $libc_restart retval=0 # Notify users of the resolver for script in "$LIBEXECDIR"/libc.d/*; do - if [ -f "$script" -a -x "$script" ]; then - "$script" "$@" + if [ -f "$script" ]; then + if [ -x "$script" ]; then + "$script" "$@" + else + (. "$script" "$@") + fi retval=$(($retval + $?)) fi done diff --git a/external/bsd/openresolv/dist/named.in b/external/bsd/openresolv/dist/named.in index da0dc68788f4..9d88910a7eed 100644 --- a/external/bsd/openresolv/dist/named.in +++ b/external/bsd/openresolv/dist/named.in @@ -28,7 +28,7 @@ [ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 . "@SYSCONFDIR@/resolvconf.conf" || exit 1 -[ -z "$named_zones" -o -z "$named_options" ] && exit 0 +[ -z "$named_zones" -a -z "$named_options" ] && exit 0 [ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" : ${named_restart:=@RESTARTCMD named@} @@ -62,17 +62,21 @@ done # No point in changing files or reloading bind if the end result has not # changed changed=false -if [ ! -f "$named_options" ] || \ - [ "$(cat "$named_options")" != "$(printf "$newoptions")" ] -then - printf "$newoptions" >"$named_options" - changed=true +if [ -n "$named_options" ]; then + if [ ! -f "$named_options" ] || \ + [ "$(cat "$named_options")" != "$(printf "$newoptions")" ] + then + printf "$newoptions" >"$named_options" + changed=true + fi fi -if [ ! -f "$named_zones" ] || \ - [ "$(cat "$named_zones")" != "$(printf "$newzones")" ] -then - printf "$newzones" >"$named_zones" - changed=true +if [ -n "$named_zones" ]; then + if [ ! -f "$named_zones" ] || \ + [ "$(cat "$named_zones")" != "$(printf "$newzones")" ] + then + printf "$newzones" >"$named_zones" + changed=true + fi fi if $changed; then diff --git a/external/bsd/openresolv/dist/resolvconf.8.in b/external/bsd/openresolv/dist/resolvconf.8.in index c60aa28eaf63..4e6f59a0449e 100644 --- a/external/bsd/openresolv/dist/resolvconf.8.in +++ b/external/bsd/openresolv/dist/resolvconf.8.in @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd November 22, 2009 +.Dd December 3, 2009 .Dt RESOLVCONF 8 SMM .Os .Sh NAME @@ -170,6 +170,21 @@ the operating systems lexical order. See .Xr resolvconf.conf 5 for details on these lists. +.Sh IMPLEMENTATION NOTES +If a subscriber has the executable bit then it is executed otherwise it is +assumed to be a shell script and sourced into the current environment in a +subshell. +This is done so that subscribers can remain fast, but are also not limited +to the shell language. +.Pp +Portable subscribers should not use anything outside of +.Pa /bin +and +.Pa /sbin +because +.Pa /usr +and others may not be available when booting. +Also, it would be unwise to assume any shell specific features. .Sh ENVIRONMENT .Bl -ohang .It Va IF_METRIC @@ -215,8 +230,6 @@ You should consult .Xr resolvconf.conf 5 for instructions on how to configure your resolver. .Sh SEE ALSO -.Xr dnsmasq 8 , -.Xr named 8 , .Xr resolv.conf 5 , .Xr resolvconf.conf 5 , .Xr resolver 3 , diff --git a/external/bsd/openresolv/dist/resolvconf.in b/external/bsd/openresolv/dist/resolvconf.in index 432852d96c6c..c0298b47ae58 100644 --- a/external/bsd/openresolv/dist/resolvconf.in +++ b/external/bsd/openresolv/dist/resolvconf.in @@ -101,7 +101,7 @@ echo_resolv() parse_resolv() { local line= ns= ds= search= d= n= newns= - local new=true iface= private=false + local new=true iface= private=false p= echo "DOMAINS=" echo "SEARCH=" @@ -113,18 +113,19 @@ parse_resolv() if ${new}; then iface="${line#\# resolv.conf from *}" new=false - case " $private_interfaces " in - *" $iface "*) + if [ -e "$PRIVATEDIR/$iface" ]; then private=true - ;; - *) - if [ -e "$PRIVATEDIR/$iface" ]; then - private=true - else - private=false - fi - ;; - esac + else + # Allow expansion + cd "$IFACEDIR" + private=false + for p in $private_interfaces; do + if [ "$p" = "$iface" ]; then + private=true + break + fi + done + fi fi ;; "nameserver "*) @@ -391,11 +392,17 @@ if [ "$cmd" = a ]; then fi eval "$(make_vars)" +export RESOLVCONF DOMAINS SEARCH NAMESERVERS : ${list_resolv:=list_resolv -l} retval=0 for script in "$LIBEXECDIR"/*; do - [ -f "$script" ] || continue - ( . "$script" "$cmd" "$iface" ) - retval=$(($retval + $?)) + if [ -f "$script" ]; then + if [ -x "$script" ]; then + "$script" "$cmd" "$iface" + else + (. "$script" "$cmd" "$fiace") + fi + retval=$(($retval + $?)) + fi done exit $retval diff --git a/external/bsd/openresolv/dist/unbound.in b/external/bsd/openresolv/dist/unbound.in index 2f44dea252aa..6d8547a8877d 100644 --- a/external/bsd/openresolv/dist/unbound.in +++ b/external/bsd/openresolv/dist/unbound.in @@ -38,7 +38,7 @@ newconf="# Generated by resolvconf\n" for d in $DOMAINS; do dn="${d%%:*}" ns="${d#*:}" - newconf="\n${newconf}forward-zone:\n\tname: \"$dn\"\n" + newconf="${newconf}\nforward-zone:\n\tname: \"$dn\"\n" while [ -n "$ns" ]; do newconf="${newconf}\tforward-addr: ${ns%%,*}\n" [ "$ns" = "${ns#*,}" ] && break @@ -47,7 +47,7 @@ for d in $DOMAINS; do done if [ -n "$NAMESERVERS" ]; then - newconf="\n${newconf}forward-zone:\n\tname: \".\"\n" + newconf="${newconf}\nforward-zone:\n\tname: \".\"\n" for n in $NAMESERVERS; do newconf="${newconf}\tforward-addr: $n\n" done @@ -57,11 +57,12 @@ if [ ! -f "$unbound_conf" ] || \ [ "$(cat "$unbound_conf")" != "$(printf "$newconf")" ] then printf "$newconf" >"$unbound_conf" - #if [ -s "$unbound_pid" ] && \ - # kill -0 $(cat "$unbound_pid") 2>/dev/null - #then - # unbound-control reload - #else + # If we can't sent a HUP then force a restart + if [ -s "$unbound_pid" ]; then + if ! kill -HUP $(cat "$unbound_pid") 2>/dev/null; then + eval $unbound_restart + fi + else eval $unbound_restart - #fi + fi fi