Import openresolv-3.9.0 with the following changes:

*  Added --version option
  *  Fix pdns_recursor restart command
  *  Append a newline when restoring resolv.conf
  *  public_interfaces overrides private interface markings
  *  Fix runit support
  *  inclusive_interfaces overrides exclusive interface markings
This commit is contained in:
roy 2016-12-30 19:42:05 +00:00
parent 19a4314eb2
commit 292189d736
2 changed files with 53 additions and 19 deletions

View File

@ -216,7 +216,7 @@ fi
if $backup; then
if [ "$newconf" = "$signature$NL" ]; then
if [ -e "$resolv_conf.bak" ]; then
newconf="$(cat "$resolv_conf.bak")"
newconf="$(cat "$resolv_conf.bak")$NL"
fi
elif [ -e "$resolv_conf" ]; then
read line <"$resolv_conf"

View File

@ -25,13 +25,19 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
RESOLVCONF="$0"
OPENRESOLV_VERSION="3.8.0"
OPENRESOLV_VERSION="3.9.0"
SYSCONFDIR=@SYSCONFDIR@
LIBEXECDIR=@LIBEXECDIR@
VARDIR=@VARDIR@
RCDIR=@RCDIR@
RESTARTCMD=@RESTARTCMD@
if [ "$1" = "--version" ]; then
echo "openresolv $OPENRESOLV_VERSION"
echo "Copyright (c) 2007-2016 Roy Marples"
exit 0
fi
# Disregard dhcpcd setting
unset interface_order state_dir
@ -90,9 +96,10 @@ usage()
that match the specified pattern
-u Run updates from our current DNS information
--version Echo the ${RESOLVCONF##*/} version
Options:
-f Ignore non existant interfaces
-f Ignore non existent interfaces
-m metric Give the added DNS information a metric
-p Mark the interface as private
-x Mark the interface as exclusive
@ -129,6 +136,34 @@ strip_trailing_dots()
printf "\n"
}
private_iface()
{
local p
# Allow expansion
cd "$IFACEDIR"
# Public interfaces override private ones.
for p in $public_interfaces; do
case "$iface" in
"$p"|"$p":*) return 1;;
esac
done
if [ -e "$PRIVATEDIR/$iface" ]; then
return 0
fi
for p in $private_interfaces; do
case "$iface" in
"$p"|"$p":*) return 0;;
esac
done
# Not a private interface
return 1
}
# Parse resolv.conf's and make variables
# for domain name servers, search name servers and global nameservers
parse_resolv()
@ -144,17 +179,10 @@ parse_resolv()
if ${new}; then
iface="${line#\# resolv.conf from *}"
new=false
if [ -e "$PRIVATEDIR/$iface" ]; then
if private_iface "$iface"; then
private=true
else
# Allow expansion
cd "$IFACEDIR"
private=false
for p in $private_interfaces; do
case "$iface" in
"$p"|"$p":*) private=true; break;;
esac
done
fi
fi
;;
@ -270,11 +298,11 @@ detect_init()
local status="@STATUSARG@"
: ${status:=status}
if [ -x /bin/systemctl -a -S /run/systemd/private ]; then
RESTARTCMD="if /bin/systemctl --quiet is-active; then
RESTARTCMD="if /bin/systemctl --quiet is-active \$1.service; then
/bin/systemctl restart \$1.service;
fi"
elif [ -x /usr/bin/systemctl -a -S /run/systemd/private ]; then
RESTARTCMD="if /usr/bin/systemctl --quiet is-active; then
RESTARTCMD="if /usr/bin/systemctl --quiet is-active \$1.service; then
/usr/bin/systemctl restart \$1.service;
fi"
elif [ -x /sbin/rc-service -a \
@ -298,9 +326,9 @@ fi"
/usr/sbin/service \$1 restart;
fi"
elif [ -x /bin/sv ]; then
RESTARTCMD="/bin/sv try-restart \$1"
RESTARTCMD="/bin/sv status \$1 >/dev/null 2>&1 && /bin/sv try-restart \$1"
elif [ -x /usr/bin/sv ]; then
RESTARTCMD="/usr/bin/sv try-restart \$1"
RESTARTCMD="/usr/bin/sv status \$1 >/dev/null 2>&1 && /usr/bin/sv try-restart \$1"
elif [ -e /etc/arch-release -a -d /etc/rc.d ]; then
RCDIR=/etc/rc.d
RESTARTCMD="if [ -e /var/run/daemons/\$1 ]; then
@ -375,6 +403,14 @@ list_resolv()
done
fi
excl=true
cd "$IFACEDIR"
for i in $inclusive_interfaces; do
if [ -f "$i" -a "$list" = "$i" ]; then
list=
excl=false
break
fi
done
;;
*)
excl=false
@ -415,7 +451,6 @@ list_resolv()
cd "$IFACEDIR"
retval=1
excl=true
for i in $(uniqify $list); do
# Only list interfaces which we really have
if ! [ -f "$i" ]; then
@ -429,8 +464,7 @@ list_resolv()
if [ "$cmd" = i -o "$cmd" = "-i" ]; then
printf %s "$i "
else
echo_resolv "$i"
echo
echo_resolv "$i" && echo
fi
[ $? = 0 -a "$retval" = 1 ] && retval=0
done
@ -884,7 +918,7 @@ export RESOLVCONF DOMAINS SEARCH NAMESERVERS LOCALNAMESERVERS
retval=0
# Run scripts in the same directory resolvconf is run from
# in case any scripts accidently dump files in the wrong place.
# in case any scripts accidentally dump files in the wrong place.
cd "$_PWD"
for script in "$LIBEXECDIR"/*; do
if [ -f "$script" ]; then