MFV r298167, r300962, r303048:

openresolv: update to version 3.8.1.

Among the new features it attempts to support alternative init systems.

MFC after:	1 month
This commit is contained in:
Pedro F. Giffuni 2016-07-20 03:52:04 +00:00
commit 3f2a60a137
9 changed files with 286 additions and 195 deletions

View File

@ -1,5 +1,4 @@
PKG= openresolv PKG= openresolv
VERSION= 3.7.3
# Nasty hack so that make clean works without configure being run # Nasty hack so that make clean works without configure being run
_CONFIG_MK!= test -e config.mk && echo config.mk || echo config-null.mk _CONFIG_MK!= test -e config.mk && echo config.mk || echo config-null.mk
@ -10,14 +9,12 @@ SBINDIR?= /sbin
SYSCONFDIR?= /etc SYSCONFDIR?= /etc
LIBEXECDIR?= /libexec/resolvconf LIBEXECDIR?= /libexec/resolvconf
VARDIR?= /var/run/resolvconf VARDIR?= /var/run/resolvconf
RCDIR?= /etc/rc.d
RESTARTCMD?= if ${RCDIR}/\1 status >/dev/null 2>\&1; then \
${RCDIR}/\1 restart; \
fi
INSTALL?= install INSTALL?= install
SED?= sed SED?= sed
VERSION!= ${SED} -n 's/OPENRESOLV_VERSION="\(.*\)".*/\1/p' resolvconf.in
BINMODE?= 0755 BINMODE?= 0755
DOCMODE?= 0644 DOCMODE?= 0644
MANMODE?= 0444 MANMODE?= 0444
@ -33,7 +30,9 @@ SED_SYSCONFDIR= -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g'
SED_LIBEXECDIR= -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' SED_LIBEXECDIR= -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g'
SED_VARDIR= -e 's:@VARDIR@:${VARDIR}:g' SED_VARDIR= -e 's:@VARDIR@:${VARDIR}:g'
SED_RCDIR= -e 's:@RCDIR@:${RCDIR}:g' SED_RCDIR= -e 's:@RCDIR@:${RCDIR}:g'
SED_RESTARTCMD= -e 's:@RESTARTCMD \(.*\)@:${RESTARTCMD}:g' SED_RESTARTCMD= -e 's:@RESTARTCMD@:${RESTARTCMD}:g'
SED_RCDIR= -e 's:@RCDIR@:${RCDIR}:g'
SED_STATUSARG= -e 's:@STATUSARG@:${STATUSARG}:g'
DISTPREFIX?= ${PKG}-${VERSION} DISTPREFIX?= ${PKG}-${VERSION}
DISTFILEGZ?= ${DISTPREFIX}.tar.gz DISTFILEGZ?= ${DISTPREFIX}.tar.gz
@ -44,9 +43,10 @@ FOSSILID?= current
all: ${TARGET} all: ${TARGET}
.in: .in: Makefile ${CONFIG_MK}
${SED} ${SED_SBINDIR} ${SED_SYSCONFDIR} ${SED_LIBEXECDIR} \ ${SED} ${SED_SBINDIR} ${SED_SYSCONFDIR} ${SED_LIBEXECDIR} \
${SED_VARDIR} ${SED_RCDIR} ${SED_RESTARTCMD} \ ${SED_VARDIR} \
${SED_RCDIR} ${SED_RESTARTCMD} ${SED_RCDIR} ${SED_STATUSARG} \
$< > $@ $< > $@
clean: clean:

View File

@ -8,6 +8,7 @@ HOST=
TARGET= TARGET=
RESTARTCMD= RESTARTCMD=
RCDIR= RCDIR=
STATUSARG=
for x do for x do
opt=${x%%=*} opt=${x%%=*}
@ -33,6 +34,8 @@ for x do
--target) TARGET=$var;; --target) TARGET=$var;;
--libdir) LIBDIR=$var;; --libdir) LIBDIR=$var;;
--restartcmd) RESTARTCMD=$var;; --restartcmd) RESTARTCMD=$var;;
--rcdir) RCDIR=$var;;
--statusarg) STATUSARG=$var;;
--includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";; --includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
--datadir|--infodir) ;; # ignore autotools --datadir|--infodir) ;; # ignore autotools
--disable-maintainer-mode|--disable-dependency-tracking) ;; --disable-maintainer-mode|--disable-dependency-tracking) ;;
@ -117,7 +120,17 @@ echo "Configuring openresolv for ... $OS"
rm -rf $CONFIG_MK rm -rf $CONFIG_MK
echo "# $OS" >$CONFIG_MK echo "# $OS" >$CONFIG_MK
for x in SYSCONFDIR SBINDIR LIBEXECDIR VARDIR MANDIR; do # On FreeBSD, /etc/init.d/foo status returns 0 if foo is not enabled
# regardless of if it's not running.
# So we force onestatus to work around this silly bug.
if [ -z "$STATUSARG" ]; then
case "$OS" in
freebsd*) STATUSARG="onestatus";;
esac
fi
for x in SYSCONFDIR SBINDIR LIBEXECDIR VARDIR MANDIR RESTARTCMD RCDIR STATUSARG
do
eval v=\$$x eval v=\$$x
# Make files look nice for import # Make files look nice for import
l=$((10 - ${#x})) l=$((10 - ${#x}))
@ -126,96 +139,6 @@ for x in SYSCONFDIR SBINDIR LIBEXECDIR VARDIR MANDIR; do
echo "$x=$t $v" >>$CONFIG_MK echo "$x=$t $v" >>$CONFIG_MK
done done
if [ -z "$RESTARTCMD" ]; then
printf "Checking for systemd ... "
if [ -x /bin/systemctl ]; then
RESTARTCMD="/bin/systemctl try-restart \1"
echo "yes"
elif [ -x /usr/bin/systemctl ]; then
RESTARTCMD="/usr/bin/systemctl try-restart \1"
echo "yes"
else
echo "no"
fi
fi
# Arch upgraded to systemd, so this check has to be just after systemd
# but higher than the others
if [ -z "$RESTARTCMD" ]; then
printf "Checking for Arch ... "
if [ -e /etc/arch-release -a -d /etc/rc.d ]; then
RCDIR=/etc/rc.d
RESTARTCMD="[ -e /var/run/daemons/\1 ] \&\& /etc/rc.d/\1 restart"
echo "yes"
else
echo "no"
fi
fi
if [ -z "$RESTARTCMD" ]; then
printf "Checking for OpenRC ... "
if [ -x /sbin/rc-service ]; then
RESTARTCMD="if /sbin/rc-service -e \1; then /sbin/rc-service \1 -- -Ds restart; fi"
echo "yes"
else
echo "no"
fi
fi
if [ -z "$RESTARTCMD" ]; then
printf "Checking for invoke-rc.d ... "
if [ -x /usr/sbin/invoke-rc.d ]; then
RCDIR=/etc/init.d
RESTARTCMD="if /usr/sbin/invoke-rc.d --quiet \1 status >/dev/null 2>\&1; then /usr/sbin/invoke-rc.d \1 restart; fi"
echo "yes"
else
echo "no"
fi
fi
if [ -z "$RESTARTCMD" ]; then
printf "Checking for service ... "
if [ -x /sbin/service ]; then
RCDIR=/etc/init.d
RESTARTCMD="if /sbin/service \1; then /sbin/service \1 restart; fi"
echo "yes"
else
echo "no"
fi
fi
if [ -z "$RESTARTCMD" ]; then
printf "Checking for runit... "
if [ -x /bin/sv ]; then
RESTARTCMD="/bin/sv try-restart \1"
echo "yes"
elif [ -x /usr/bin/sv ]; then
RESTARTCMD="/usr/bin/sv try-restart \1"
echo "yes"
else
echo "no"
fi
fi
if [ -z "$RESTARTCMD" ]; then
for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do
printf "Checking for $x ... "
if [ -d $x ]; then
RCDIR=$x
RESTARTCMD="if $x/\1 status >/dev/null 2>\&1; then $x/\1 restart; fi"
echo "yes"
break
else
echo "no"
fi
done
fi
if [ -z "$RESTARTCMD" ]; then
echo "$0: WARNING: No means of interacting with system services detected!"
exit 1
fi
echo "RCDIR= $RCDIR" >>$CONFIG_MK
# Work around bug in the dash shell as "echo 'foo \1'" does bad things
printf "%s\n" "RESTARTCMD= $RESTARTCMD" >>$CONFIG_MK
echo echo
echo " SYSCONFDIR = $SYSCONFDIR" echo " SYSCONFDIR = $SYSCONFDIR"
echo " SBINDIR = $SBINDIR" echo " SBINDIR = $SBINDIR"
@ -223,3 +146,7 @@ echo " LIBEXECDIR = $LIBEXECDIR"
echo " VARDIR = $RUNDIR" echo " VARDIR = $RUNDIR"
echo " MANDIR = $MANDIR" echo " MANDIR = $MANDIR"
echo echo
echo " RESTARTCMD = $RESTARTCMD"
echo " RCDIR = $RCDIR"
echo " STATUSARG = $STATUSARG"
echo

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Copyright (c) 2007-2012 Roy Marples # Copyright (c) 2007-2016 Roy Marples
# All rights reserved # All rights reserved
# dnsmasq subscriber for resolvconf # dnsmasq subscriber for resolvconf
@ -37,7 +37,6 @@ NL="
[ -s "$dnsmasq_pid" ] || dnsmasq_pid=/var/run/dnsmasq/dnsmasq.pid [ -s "$dnsmasq_pid" ] || dnsmasq_pid=/var/run/dnsmasq/dnsmasq.pid
[ -s "$dnsmasq_pid" ] || unset dnsmasq_pid [ -s "$dnsmasq_pid" ] || unset dnsmasq_pid
: ${dnsmasq_service:=dnsmasq} : ${dnsmasq_service:=dnsmasq}
: ${dnsmasq_restart:=@RESTARTCMD ${dnsmasq_service}@}
newconf="# Generated by resolvconf$NL" newconf="# Generated by resolvconf$NL"
newresolv="$newconf" newresolv="$newconf"
@ -180,7 +179,15 @@ if [ -n "$dnsmasq_resolv" ]; then
fi fi
if $changed; then if $changed; then
eval $dnsmasq_restart # dnsmasq does not re-read the configuration file on SIGHUP
if [ -n "$dnsmasq_restart" ]; then
eval $dnsmasq_restart
elif [ -n "$RESTARTCMD" ]; then
set -- ${dnsmasq_service}
eval $RESTARTCMD
else
@SBINDIR@/resolvconf -r ${dnsmasq_service}
fi
fi fi
if $dbus; then if $dbus; then
if [ -s "$dnsmasq_pid" ]; then if [ -s "$dnsmasq_pid" ]; then

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Copyright (c) 2007-2014 Roy Marples # Copyright (c) 2007-2016 Roy Marples
# All rights reserved # All rights reserved
# libc subscriber for resolvconf # libc subscriber for resolvconf
@ -97,7 +97,6 @@ elif [ -d "$SYSCONFDIR"/resolvconf ]; then
fi fi
: ${resolv_conf:=/etc/resolv.conf} : ${resolv_conf:=/etc/resolv.conf}
: ${libc_service:=nscd} : ${libc_service:=nscd}
: ${libc_restart:=@RESTARTCMD ${libc_service}@}
: ${list_resolv:=@SBINDIR@/resolvconf -l} : ${list_resolv:=@SBINDIR@/resolvconf -l}
if [ "${resolv_conf_head-x}" = x -a -f "$SYSCONFDIR"/resolv.conf.head ]; then if [ "${resolv_conf_head-x}" = x -a -f "$SYSCONFDIR"/resolv.conf.head ]; then
resolv_conf_head="$(cat "${SYSCONFDIR}"/resolv.conf.head)" resolv_conf_head="$(cat "${SYSCONFDIR}"/resolv.conf.head)"
@ -229,7 +228,14 @@ fi
# Create our resolv.conf now # Create our resolv.conf now
(umask 022; echo "$newconf" >"$resolv_conf") (umask 022; echo "$newconf" >"$resolv_conf")
eval $libc_restart if [ -n "$libc_restart" ]; then
eval $libc_restart
elif [ -n "$RESTARTCMD" ]; then
set -- ${libc_service}
eval $RESTARTCMD
else
@SBINDIR@/resolvconf -r ${libc_service}
fi
retval=0 retval=0
# Notify users of the resolver # Notify users of the resolver

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Copyright (c) 2007-2012 Roy Marples # Copyright (c) 2007-2016 Roy Marples
# All rights reserved # All rights reserved
# named subscriber for resolvconf # named subscriber for resolvconf
@ -35,18 +35,22 @@ NL="
# Platform specific kludges # Platform specific kludges
if [ -z "$named_service" -a -z "$named_restart" -a \ if [ -z "$named_service" -a -z "$named_restart" -a \
-d "@RCDIR@" -a ! -x "@RCDIR@"/named ] -d "$RCDIR" -a ! -x "$RCDIR"/named ]
then then
if [ -x "@RCDIR@"/bind9 ]; then if [ -x "$RCDIR"/bind9 ]; then
# Debian and derivatives # Debian and derivatives
named_service=bind9 named_service=bind9
elif [ -x "@RCDIR@"/rc.bind ]; then elif [ -x "$RCDIR"/rc.bind ]; then
# Slackware # Slackware
named_service=rc.bind named_service=rc.bind
fi fi
fi fi
: ${named_service:=named} : ${named_service:=named}
: ${named_restart:=@RESTARTCMD ${named_service}@}
: ${named_pid:=/var/run/$named_service.pid}
[ -s "$named_pid" ] || named_pid=/var/run/$named_service/$named_service.pid
[ -s "$named_pid" ] || unset named_pid
newoptions="# Generated by resolvconf$NL" newoptions="# Generated by resolvconf$NL"
newzones="$newoptions" newzones="$newoptions"
@ -101,6 +105,14 @@ if [ -n "$named_zones" ]; then
fi fi
fi fi
# named does not seem to work with SIGHUP which is a same
if $changed; then if $changed; then
eval $named_restart if [ -n "$named_restart" ]; then
eval $named_restart
elif [ -n "$RESTARTCMD" ]; then
set -- ${named_service}
eval $RESTARTCMD
else
@SBINDIR@/resolvconf -r ${named_service}
fi
fi fi

View File

@ -1,4 +1,4 @@
.\" Copyright (c) 2007-2015 Roy Marples .\" Copyright (c) 2007-2016 Roy Marples
.\" All rights reserved .\" All rights reserved
.\" .\"
.\" Redistribution and use in source and binary forms, with or without .\" Redistribution and use in source and binary forms, with or without
@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd April 27, 2015 .Dd May 7, 2016
.Dt RESOLVCONF 8 .Dt RESOLVCONF 8
.Os .Os
.Sh NAME .Sh NAME
@ -64,7 +64,7 @@ solves this by letting the daemon send their
file to file to
.Nm .Nm
via via
.Xr stdin 3 .Xr stdin 4
with the argument with the argument
.Fl a Ar interface Ns Op Ar .protocol .Fl a Ar interface Ns Op Ar .protocol
instead of the filesystem. instead of the filesystem.
@ -101,7 +101,7 @@ as private.
This means that the name servers listed in that This means that the name servers listed in that
.Pa resolv.conf .Pa resolv.conf
are only used for queries against the domain/search listed in the same file. are only used for queries against the domain/search listed in the same file.
This only works when a local resolver other than libc is installed. This only works when a local resolver other than libc is installed.
See See
.Xr resolvconf.conf 5 .Xr resolvconf.conf 5
for how to configure for how to configure
@ -125,24 +125,28 @@ file(s) for all the
on the on the
.Ar interface . .Ar interface .
.Pp .Pp
Here are some more options that Here are some options for the above commands:-
.Nm
has:-
.Bl -tag -width indent .Bl -tag -width indent
.It Fl I
Initialise the state directory
.Pa @VARDIR@ .
This only needs to be called if the initial system boot sequence does not
automatically clean it out; for example the state directory is moved
somewhere other than
.Pa /var/run .
If used, it should only be called once as early in the system boot sequence
as possible and before
.Nm
is used to add interfaces.
.It Fl f .It Fl f
Ignore non existant interfaces. Ignore non existent interfaces.
Only really useful for deleting interfaces. Only really useful for deleting interfaces.
.It Fl m Ar metric
Set the metric of the interface when adding it, default of 0.
Lower metrics take precedence.
This affects the default order of interfaces when listed.
.It Fl p
Marks the interface
.Pa resolv.conf
as private.
.It Fl x
Mark the interface
.Pa resolv.conf
as exclusive when adding, otherwise only use the latest exclusive interface.
.El
.Pp
.Nm
has some more commands for general usage:-
.Bl -tag -width indent
.It Fl i Ar pattern .It Fl i Ar pattern
List the interfaces and protocols, optionally matching List the interfaces and protocols, optionally matching
.Ar pattern , .Ar pattern ,
@ -157,14 +161,6 @@ If
.Ar pattern .Ar pattern
is specified then we list the files for the interfaces and protocols is specified then we list the files for the interfaces and protocols
that match it. that match it.
.It Fl m Ar metric
Set the metric of the interface when adding it, default of 0.
Lower metrics take precedence.
This affects the default order of interfaces when listed.
.It Fl p
Marks the interface
.Pa resolv.conf
as private.
.It Fl u .It Fl u
Force Force
.Nm .Nm
@ -172,15 +168,31 @@ to update all its subscribers.
.Nm .Nm
does not update the subscribers when adding a resolv.conf that matches does not update the subscribers when adding a resolv.conf that matches
what it already has for that interface. what it already has for that interface.
.It Fl x
Mark the interface
.Pa resolv.conf
as exclusive when adding, otherwise only use the latest exclusive interface.
.El .El
.Pp .Pp
.Nm .Nm
also has some options designed to be used by its subscribers:- also has some commands designed to be used by it's subscribers and
system startup:-
.Bl -tag -width indent .Bl -tag -width indent
.It Fl I
Initialise the state directory
.Pa @VARDIR@ .
This only needs to be called if the initial system boot sequence does not
automatically clean it out; for example the state directory is moved
somewhere other than
.Pa /var/run .
If used, it should only be called once as early in the system boot sequence
as possible and before
.Nm
is used to add interfaces.
.It Fl R
Echo the command used to restart a service.
.It Fl r Ar service
If the
.Ar service
is running then restart it.
If the service does not exist or is not running then zero is returned,
otherwise the result of restarting the service.
.It Fl v .It Fl v
Echo variables DOMAINS, SEARCH and NAMESERVERS so that the subscriber can Echo variables DOMAINS, SEARCH and NAMESERVERS so that the subscriber can
configure the resolver easily. configure the resolver easily.
@ -278,16 +290,16 @@ Directory of subscribers which are run after the libc subscriber is run.
State directory for State directory for
.Nm . .Nm .
.El .El
.Sh SEE ALSO
.Xr resolver 3 ,
.Xr stdin 4 ,
.Xr resolv.conf 5 ,
.Xr resolvconf.conf 5
.Sh HISTORY .Sh HISTORY
This implementation of This implementation of
.Nm .Nm
is called openresolv and is fully command line compatible with Debian's is called openresolv and is fully command line compatible with Debian's
resolvconf, as written by Thomas Hood. resolvconf, as written by Thomas Hood.
.Sh SEE ALSO
.Xr resolv.conf 5 ,
.Xr resolvconf.conf 5 ,
.Xr resolver 3 ,
.Xr stdin 3
.Sh AUTHORS .Sh AUTHORS
.An Roy Marples Aq Mt roy@marples.name .An Roy Marples Aq Mt roy@marples.name
.Sh BUGS .Sh BUGS

View File

@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.Dd February 21, 2016 .Dd April 28, 2016
.Dt RESOLVCONF.CONF 5 .Dt RESOLVCONF.CONF 5
.Os .Os
.Sh NAME .Sh NAME
@ -103,7 +103,8 @@ This is equivalent to the
.Nm resolvconf -p .Nm resolvconf -p
option. option.
.It Sy replace .It Sy replace
Is a space separated list of replacement keywords. The syntax is this: Is a space separated list of replacement keywords.
The syntax is this:
.Va $keyword Ns / Ns Va $match Ns / Ns Va $replacement .Va $keyword Ns / Ns Va $match Ns / Ns Va $replacement
.Pp .Pp
Example, given this resolv.conf: Example, given this resolv.conf:
@ -284,33 +285,32 @@ variables, documented below.
.Pp .Pp
.Bl -tag -width indent .Bl -tag -width indent
.It Sy dnsmasq_service .It Sy dnsmasq_service
Location of the dnsmasq service. Name of the dnsmasq service.
.It Sy dnsmasq_restart .It Sy dnsmasq_restart
Command to restart the dnsmasq service. Command to restart the dnsmasq service.
.It Sy dnsmasq_pid .It Sy dnsmasq_pid
Location of the dnsmasq pidfile. Location of the dnsmasq pidfile.
.It Sy libc_service .It Sy libc_service
Location of the libc service. Name of the libc service.
.It Sy libc_restart .It Sy libc_restart
Command to restart the libc service. Command to restart the libc service.
.It Sy named_service .It Sy named_service
Location of the named service. Name of the named service.
.It Sy named_restart .It Sy named_restart
Command to restart the named service. Command to restart the named service.
.It Sy pdnsd_restart .It Sy pdnsd_restart
Command to restart the pdnsd service. Command to restart the pdnsd service.
.It Sy unbound_service .It Sy unbound_service
Location of the unbound service. Name of the unbound service.
.It Sy unbound_restart .It Sy unbound_restart
Command to restart the unbound service. Command to restart the unbound service.
.It Sy unbound_pid .It Sy unbound_pid
Location of the unbound pidfile. Location of the unbound pidfile.
.El .El
.Sh SEE ALSO .Sh SEE ALSO
.Xr sh 1 ,
.Xr resolv.conf 5 , .Xr resolv.conf 5 ,
.Xr resolvconf 8 .Xr resolvconf 8
and
.Xr sh 1 .
.Sh AUTHORS .Sh AUTHORS
.An Roy Marples Aq Mt roy@marples.name .An Roy Marples Aq Mt roy@marples.name
.Sh BUGS .Sh BUGS

View File

@ -25,9 +25,12 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
RESOLVCONF="$0" RESOLVCONF="$0"
OPENRESOLV_VERSION="3.8.1"
SYSCONFDIR=@SYSCONFDIR@ SYSCONFDIR=@SYSCONFDIR@
LIBEXECDIR=@LIBEXECDIR@ LIBEXECDIR=@LIBEXECDIR@
VARDIR=@VARDIR@ VARDIR=@VARDIR@
RCDIR=@RCDIR@
RESTARTCMD=@RESTARTCMD@
# Disregard dhcpcd setting # Disregard dhcpcd setting
unset interface_order state_dir unset interface_order state_dir
@ -71,55 +74,45 @@ error_exit()
usage() usage()
{ {
cat <<-EOF cat <<-EOF
Usage: ${RESOLVCONF##*/} [options] Usage: ${RESOLVCONF##*/} [options] command [argument]
Inform the system about any DNS updates. Inform the system about any DNS updates.
Options: Commands:
-a \$INTERFACE Add DNS information to the specified interface -a \$INTERFACE Add DNS information to the specified interface
(DNS supplied via stdin in resolv.conf format) (DNS supplied via stdin in resolv.conf format)
-m metric Give the added DNS information a metric
-p Mark the interface as private
-x Mark the interface as exclusive
-d \$INTERFACE Delete DNS information from the specified interface -d \$INTERFACE Delete DNS information from the specified interface
-f Ignore non existant interfaces -h Show this help cruft
-I Init the state dir
-u Run updates from our current DNS information
-l [\$PATTERN] Show DNS information, optionally from interfaces
that match the specified pattern
-i [\$PATTERN] Show interfaces that have supplied DNS information -i [\$PATTERN] Show interfaces that have supplied DNS information
optionally from interfaces that match the specified optionally from interfaces that match the specified
pattern pattern
-l [\$PATTERN] Show DNS information, optionally from interfaces
that match the specified pattern
-u Run updates from our current DNS information
Options:
-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
Subscriber and System Init Commands:
-I Init the state dir
-r \$SERVICE Restart the system service
(restarting a non-existent or non-running service
should have no output and return 0)
-R Show the system service restart command
-v [\$PATTERN] echo NEWDOMAIN, NEWSEARCH and NEWNS variables to -v [\$PATTERN] echo NEWDOMAIN, NEWSEARCH and NEWNS variables to
the console the console
-h Show this help cruft -V [\$PATTERN] Same as -v, but only uses configuration in
$SYSCONFDIR/resolvconf.conf
EOF EOF
[ -z "$1" ] && exit 0 [ -z "$1" ] && exit 0
echo echo
error_exit "$*" error_exit "$*"
} }
echo_resolv()
{
local line= OIFS="$IFS"
[ -n "$1" -a -f "$IFACEDIR/$1" ] || return 1
echo "# resolv.conf from $1"
# Our variable maker works of the fact each resolv.conf per interface
# is separated by blank lines.
# So we remove them when echoing them.
while read -r line; do
IFS="$OIFS"
if [ -n "$line" ]; then
# We need to set IFS here to preserve any whitespace
IFS=''
printf "%s\n" "$line"
fi
done < "$IFACEDIR/$1"
echo
IFS="$OIFS"
}
# Strip any trailing dot from each name as a FQDN does not belong # Strip any trailing dot from each name as a FQDN does not belong
# in resolv.conf(5) # in resolv.conf(5)
# If you think otherwise, capture a DNS trace and you'll see libc # If you think otherwise, capture a DNS trace and you'll see libc
@ -159,7 +152,10 @@ parse_resolv()
private=false private=false
for p in $private_interfaces; do for p in $private_interfaces; do
case "$iface" in case "$iface" in
"$p"|"$p":*) private=true; break;; "$p"|"$p":*)
private=true
break
;;
esac esac
done done
fi fi
@ -261,6 +257,108 @@ config_mkdirs()
return $e return $e
} }
# With the advent of alternative init systems, it's possible to have
# more than one installed. So we need to try and guess what one we're
# using unless overriden by configure.
# Note that restarting a service is a last resort - the subscribers
# should make a reasonable attempt to reconfigre the service via some
# method, normally SIGHUP.
detect_init()
{
[ -n "$RESTARTCMD" ] && return 0
# Detect the running init system.
# As systemd and OpenRC can be installed on top of legacy init
# systems we try to detect them first.
local status="@STATUSARG@"
: ${status:=status}
if [ -x /bin/systemctl -a -S /run/systemd/private ]; 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 \$1.service; then
/usr/bin/systemctl restart \$1.service;
fi"
elif [ -x /sbin/rc-service -a \
-s /libexec/rc/init.d/softlevel -o -s /run/openrc/softlevel ]
then
RESTARTCMD="/sbin/rc-service -i \$1 -- -Ds restart"
elif [ -x /usr/sbin/invoke-rc.d ]; then
RCDIR=/etc/init.d
RESTARTCMD="if /usr/sbin/invoke-rc.d --quiet \$1 status 1>/dev/null 2>&1; then
/usr/sbin/invoke-rc.d \$1 restart;
fi"
elif [ -x /sbin/service ]; then
# Old RedHat
RCDIR=/etc/init.d
RESTARTCMD="if /sbin/service \$1; then
/sbin/service \$1 restart;
fi"
elif [ -x /usr/sbin/service ]; then
# Could be FreeBSD
RESTARTCMD="if /usr/sbin/service \$1 $status 1>/dev/null 2>&1; then
/usr/sbin/service \$1 restart;
fi"
elif [ -x /bin/sv ]; then
RESTARTCMD="/bin/sv try-restart \$1"
elif [ -x /usr/bin/sv ]; then
RESTARTCMD="/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
/etc/rc.d/\$1 restart;
fi"
elif [ -e /etc/slackware-version -a -d /etc/rc.d ]; then
RESTARTCMD="if /etc/rc.d/rc.\$1 status 1>/dev/null 2>&1; then
/etc/rc.d/rc.\$1 restart;
fi"
elif [ -e /etc/rc.d/rc.subr -a -d /etc/rc.d ]; then
# OpenBSD
RESTARTCMD="if /etc/rc.d/\$1 check 1>/dev/null 2>&1; then
/etc/rc.d/\$1 restart;
fi"
else
for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do
[ -d $x ] || continue
RESTARTCMD="if $x/\$1 $status 1>/dev/null 2>&1; then
$x/\$1 restart;
fi"
break
done
fi
if [ -z "$RESTARTCMD" ]; then
if [ "$NOINIT_WARNED" != true ]; then
warn "could not detect a useable init system"
_NOINIT_WARNED=true
fi
return 1
fi
_NOINIT_WARNED=
return 0
}
echo_resolv()
{
local line= OIFS="$IFS"
[ -n "$1" -a -f "$IFACEDIR/$1" ] || return 1
echo "# resolv.conf from $1"
# Our variable maker works of the fact each resolv.conf per interface
# is separated by blank lines.
# So we remove them when echoing them.
while read -r line; do
IFS="$OIFS"
if [ -n "$line" ]; then
# We need to set IFS here to preserve any whitespace
IFS=''
printf "%s\n" "$line"
fi
done < "$IFACEDIR/$1"
IFS="$OIFS"
}
list_resolv() list_resolv()
{ {
[ -d "$IFACEDIR" ] || return 0 [ -d "$IFACEDIR" ] || return 0
@ -320,6 +418,7 @@ list_resolv()
cd "$IFACEDIR" cd "$IFACEDIR"
retval=1 retval=1
excl=true
for i in $(uniqify $list); do for i in $(uniqify $list); do
# Only list interfaces which we really have # Only list interfaces which we really have
if ! [ -f "$i" ]; then if ! [ -f "$i" ]; then
@ -334,6 +433,7 @@ list_resolv()
printf %s "$i " printf %s "$i "
else else
echo_resolv "$i" echo_resolv "$i"
echo
fi fi
[ $? = 0 -a "$retval" = 1 ] && retval=0 [ $? = 0 -a "$retval" = 1 ] && retval=0
done done
@ -499,7 +599,7 @@ make_vars()
force=false force=false
VFLAG= VFLAG=
while getopts a:Dd:fhIilm:puvVx OPT; do while getopts a:Dd:fhIilm:pRruvVx OPT; do
case "$OPT" in case "$OPT" in
f) force=true;; f) force=true;;
h) usage;; h) usage;;
@ -541,6 +641,18 @@ if [ "$cmd" = l -o "$cmd" = i ]; then
exit $? exit $?
fi fi
# Restart a service or echo the command to restart a service
if [ "$cmd" = r -o "$cmd" = R ]; then
detect_init || exit 1
if [ "$cmd" = r ]; then
set -- $args
eval $RESTARTCMD
else
echo "$RESTARTCMD"
fi
exit $?
fi
# Not normally needed, but subscribers should be able to run independently # Not normally needed, but subscribers should be able to run independently
if [ "$cmd" = v -o -n "$VFLAG" ]; then if [ "$cmd" = v -o -n "$VFLAG" ]; then
make_vars "$iface" make_vars "$iface"
@ -765,13 +877,17 @@ case "${resolvconf:-YES}" in
*) exit 0;; *) exit 0;;
esac esac
# Try and detect a suitable init system for our scripts
detect_init
export RESTARTCMD RCDIR _NOINIT_WARNED
eval "$(make_vars)" eval "$(make_vars)"
export RESOLVCONF DOMAINS SEARCH NAMESERVERS LOCALNAMESERVERS export RESOLVCONF DOMAINS SEARCH NAMESERVERS LOCALNAMESERVERS
: ${list_resolv:=list_resolv -l} : ${list_resolv:=list_resolv -l}
retval=0 retval=0
# Run scripts in the same directory resolvconf is run from # 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" cd "$_PWD"
for script in "$LIBEXECDIR"/*; do for script in "$LIBEXECDIR"/*; do
if [ -f "$script" ]; then if [ -f "$script" ]; then

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Copyright (c) 2009-2014 Roy Marples # Copyright (c) 2009-2016 Roy Marples
# All rights reserved # All rights reserved
# unbound subscriber for resolvconf # unbound subscriber for resolvconf
@ -37,7 +37,6 @@ NL="
: ${unbound_pid:=/var/run/unbound.pid} : ${unbound_pid:=/var/run/unbound.pid}
: ${unbound_service:=unbound} : ${unbound_service:=unbound}
: ${unbound_restart:=@RESTARTCMD ${unbound_service}@}
newconf="# Generated by resolvconf$NL" newconf="# Generated by resolvconf$NL"
for d in $DOMAINS; do for d in $DOMAINS; do
@ -71,6 +70,18 @@ else
@SBINDIR@/resolvconf -D "$unbound_conf" @SBINDIR@/resolvconf -D "$unbound_conf"
fi fi
restart_unbound()
{
if [ -n "$unbound_restart" ]; then
eval $unbound_restart
elif [ -n "$RESTARTCMD" ]; then
set -- ${unbound_service}
eval $RESTARTCMD
else
@SBINDIR@/resolvconf -r ${unbound_service}
fi
}
if [ ! -f "$unbound_conf" ] || \ if [ ! -f "$unbound_conf" ] || \
[ "$(cat "$unbound_conf")" != "$(printf %s "$newconf")" ] [ "$(cat "$unbound_conf")" != "$(printf %s "$newconf")" ]
then then
@ -78,9 +89,9 @@ then
# If we can't sent a HUP then force a restart # If we can't sent a HUP then force a restart
if [ -s "$unbound_pid" ]; then if [ -s "$unbound_pid" ]; then
if ! kill -HUP $(cat "$unbound_pid") 2>/dev/null; then if ! kill -HUP $(cat "$unbound_pid") 2>/dev/null; then
eval $unbound_restart restart_unbound
fi fi
else else
eval $unbound_restart restart_unbound
fi fi
fi fi