Author: pfg
Date: Wed Jul 20 03:52:04 2016
New Revision: 303062
URL: https://svnweb.freebsd.org/changeset/base/303062

Log:
  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

Modified:
  head/contrib/openresolv/Makefile
  head/contrib/openresolv/configure
  head/contrib/openresolv/dnsmasq.in
  head/contrib/openresolv/libc.in
  head/contrib/openresolv/named.in
  head/contrib/openresolv/resolvconf.8.in
  head/contrib/openresolv/resolvconf.conf.5.in
  head/contrib/openresolv/resolvconf.in
  head/contrib/openresolv/unbound.in
Directory Properties:
  head/contrib/openresolv/   (props changed)

Modified: head/contrib/openresolv/Makefile
==============================================================================
--- head/contrib/openresolv/Makefile    Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/Makefile    Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,5 +1,4 @@
 PKG=           openresolv
-VERSION=       3.7.3
 
 # Nasty hack so that make clean works without configure being run
 _CONFIG_MK!=   test -e config.mk && echo config.mk || echo config-null.mk
@@ -10,14 +9,12 @@ SBINDIR?=    /sbin
 SYSCONFDIR?=   /etc
 LIBEXECDIR?=   /libexec/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
 SED?=          sed
 
+VERSION!=      ${SED} -n 's/OPENRESOLV_VERSION="\(.*\)".*/\1/p' resolvconf.in
+
 BINMODE?=      0755
 DOCMODE?=      0644
 MANMODE?=      0444
@@ -33,7 +30,9 @@ SED_SYSCONFDIR=               -e 's:@SYSCONFDIR@:${SY
 SED_LIBEXECDIR=                -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g'
 SED_VARDIR=            -e 's:@VARDIR@:${VARDIR}: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}
 DISTFILEGZ?=   ${DISTPREFIX}.tar.gz
@@ -44,9 +43,10 @@ FOSSILID?=   current
 
 all: ${TARGET}
 
-.in:
+.in: Makefile ${CONFIG_MK}
        ${SED}  ${SED_SBINDIR} ${SED_SYSCONFDIR} ${SED_LIBEXECDIR} \
-               ${SED_VARDIR} ${SED_RCDIR} ${SED_RESTARTCMD} \
+               ${SED_VARDIR} \
+               ${SED_RCDIR} ${SED_RESTARTCMD} ${SED_RCDIR} ${SED_STATUSARG} \
                $< > $@
 
 clean:

Modified: head/contrib/openresolv/configure
==============================================================================
--- head/contrib/openresolv/configure   Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/configure   Wed Jul 20 03:52:04 2016        
(r303062)
@@ -8,6 +8,7 @@ HOST=
 TARGET=
 RESTARTCMD=
 RCDIR=
+STATUSARG=
 
 for x do
        opt=${x%%=*}
@@ -33,6 +34,8 @@ for x do
        --target) TARGET=$var;;
        --libdir) LIBDIR=$var;;
        --restartcmd) RESTARTCMD=$var;;
+       --rcdir) RCDIR=$var;;
+       --statusarg) STATUSARG=$var;;
        --includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
        --datadir|--infodir) ;; # ignore autotools
        --disable-maintainer-mode|--disable-dependency-tracking) ;;
@@ -117,7 +120,17 @@ echo "Configuring openresolv for ... $OS
 rm -rf $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
        # Make files look nice for import
        l=$((10 - ${#x}))
@@ -126,96 +139,6 @@ for x in SYSCONFDIR SBINDIR LIBEXECDIR V
        echo "$x=$t     $v" >>$CONFIG_MK
 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 "   SYSCONFDIR =          $SYSCONFDIR"
 echo "   SBINDIR =             $SBINDIR"
@@ -223,3 +146,7 @@ echo "   LIBEXECDIR =               $LIBEXECDIR"
 echo "   VARDIR =              $RUNDIR"
 echo "   MANDIR =              $MANDIR"
 echo
+echo "   RESTARTCMD =          $RESTARTCMD"
+echo "   RCDIR =               $RCDIR"
+echo "   STATUSARG =           $STATUSARG"
+echo

Modified: head/contrib/openresolv/dnsmasq.in
==============================================================================
--- head/contrib/openresolv/dnsmasq.in  Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/dnsmasq.in  Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (c) 2007-2012 Roy Marples
+# Copyright (c) 2007-2016 Roy Marples
 # All rights reserved
 
 # dnsmasq subscriber for resolvconf
@@ -37,7 +37,6 @@ NL="
 [ -s "$dnsmasq_pid" ] || dnsmasq_pid=/var/run/dnsmasq/dnsmasq.pid
 [ -s "$dnsmasq_pid" ] || unset dnsmasq_pid
 : ${dnsmasq_service:=dnsmasq}
-: ${dnsmasq_restart:=@RESTARTCMD ${dnsmasq_service}@}
 newconf="# Generated by resolvconf$NL"
 newresolv="$newconf"
 
@@ -180,7 +179,15 @@ if [ -n "$dnsmasq_resolv" ]; then
 fi
 
 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
 if $dbus; then
        if [ -s "$dnsmasq_pid" ]; then

Modified: head/contrib/openresolv/libc.in
==============================================================================
--- head/contrib/openresolv/libc.in     Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/libc.in     Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (c) 2007-2014 Roy Marples
+# Copyright (c) 2007-2016 Roy Marples
 # All rights reserved
 
 # libc subscriber for resolvconf
@@ -97,7 +97,6 @@ elif [ -d "$SYSCONFDIR"/resolvconf ]; th
 fi
 : ${resolv_conf:=/etc/resolv.conf}
 : ${libc_service:=nscd}
-: ${libc_restart:=@RESTARTCMD ${libc_service}@}
 : ${list_resolv:=@SBINDIR@/resolvconf -l}
 if [ "${resolv_conf_head-x}" = x -a -f "$SYSCONFDIR"/resolv.conf.head ]; then
        resolv_conf_head="$(cat "${SYSCONFDIR}"/resolv.conf.head)"
@@ -229,7 +228,14 @@ fi
 
 # Create our resolv.conf now
 (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
 # Notify users of the resolver

Modified: head/contrib/openresolv/named.in
==============================================================================
--- head/contrib/openresolv/named.in    Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/named.in    Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (c) 2007-2012 Roy Marples
+# Copyright (c) 2007-2016 Roy Marples
 # All rights reserved
 
 # named subscriber for resolvconf
@@ -35,18 +35,22 @@ NL="
 
 # Platform specific kludges
 if [ -z "$named_service" -a -z "$named_restart" -a \
-       -d "@RCDIR@" -a ! -x "@RCDIR@"/named ]
+       -d "$RCDIR" -a ! -x "$RCDIR"/named ]
 then
-       if [ -x "@RCDIR@"/bind9 ]; then
+       if [ -x "$RCDIR"/bind9 ]; then
                # Debian and derivatives
                named_service=bind9
-       elif [ -x "@RCDIR@"/rc.bind ]; then
+       elif [ -x "$RCDIR"/rc.bind ]; then
                # Slackware
                named_service=rc.bind
        fi
 fi
 : ${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"
 newzones="$newoptions"
 
@@ -101,6 +105,14 @@ if [ -n "$named_zones" ]; then
        fi
 fi
 
+# named does not seem to work with SIGHUP which is a same
 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

Modified: head/contrib/openresolv/resolvconf.8.in
==============================================================================
--- head/contrib/openresolv/resolvconf.8.in     Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/resolvconf.8.in     Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2007-2015 Roy Marples
+.\" Copyright (c) 2007-2016 Roy Marples
 .\" All rights reserved
 .\"
 .\" 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
 .\" SUCH DAMAGE.
 .\"
-.Dd April 27, 2015
+.Dd May 7, 2016
 .Dt RESOLVCONF 8
 .Os
 .Sh NAME
@@ -64,7 +64,7 @@ solves this by letting the daemon send t
 file to
 .Nm
 via
-.Xr stdin 3
+.Xr stdin 4
 with the argument
 .Fl a Ar interface Ns Op Ar .protocol
 instead of the filesystem.
@@ -101,7 +101,7 @@ as private.
 This means that the name servers listed in that
 .Pa resolv.conf
 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
 .Xr resolvconf.conf 5
 for how to configure
@@ -125,24 +125,28 @@ file(s) for all the
 on the
 .Ar interface .
 .Pp
-Here are some more options that
-.Nm
-has:-
+Here are some options for the above commands:-
 .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
-Ignore non existant interfaces.
+Ignore non existent 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
 List the interfaces and protocols, optionally matching
 .Ar pattern ,
@@ -157,14 +161,6 @@ If
 .Ar pattern
 is specified then we list the files for the interfaces and protocols
 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
 Force
 .Nm
@@ -172,15 +168,31 @@ to update all its subscribers.
 .Nm
 does not update the subscribers when adding a resolv.conf that matches
 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
 .Pp
 .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
+.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
 Echo variables DOMAINS, SEARCH and NAMESERVERS so that the subscriber can
 configure the resolver easily.
@@ -278,16 +290,16 @@ Directory of subscribers which are run a
 State directory for
 .Nm .
 .El
+.Sh SEE ALSO
+.Xr resolver 3 ,
+.Xr stdin 4 ,
+.Xr resolv.conf 5 ,
+.Xr resolvconf.conf 5
 .Sh HISTORY
 This implementation of
 .Nm
 is called openresolv and is fully command line compatible with Debian's
 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
 .An Roy Marples Aq Mt r...@marples.name
 .Sh BUGS

Modified: head/contrib/openresolv/resolvconf.conf.5.in
==============================================================================
--- head/contrib/openresolv/resolvconf.conf.5.in        Wed Jul 20 03:13:02 
2016        (r303061)
+++ head/contrib/openresolv/resolvconf.conf.5.in        Wed Jul 20 03:52:04 
2016        (r303062)
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd February 21, 2016
+.Dd April 28, 2016
 .Dt RESOLVCONF.CONF 5
 .Os
 .Sh NAME
@@ -103,7 +103,8 @@ This is equivalent to the
 .Nm resolvconf -p
 option.
 .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
 .Pp
 Example, given this resolv.conf:
@@ -284,33 +285,32 @@ variables, documented below.
 .Pp
 .Bl -tag -width indent
 .It Sy dnsmasq_service
-Location of the dnsmasq service.
+Name of the dnsmasq service.
 .It Sy dnsmasq_restart
 Command to restart the dnsmasq service.
 .It Sy dnsmasq_pid
 Location of the dnsmasq pidfile.
 .It Sy libc_service
-Location of the libc service.
+Name of the libc service.
 .It Sy libc_restart
 Command to restart the libc service.
 .It Sy named_service
-Location of the named service.
+Name of the named service.
 .It Sy named_restart
 Command to restart the named service.
 .It Sy pdnsd_restart
 Command to restart the pdnsd service.
 .It Sy unbound_service
-Location of the unbound service.
+Name of the unbound service.
 .It Sy unbound_restart
 Command to restart the unbound service.
 .It Sy unbound_pid
 Location of the unbound pidfile.
 .El
 .Sh SEE ALSO
+.Xr sh 1 ,
 .Xr resolv.conf 5 ,
 .Xr resolvconf 8
-and
-.Xr sh 1 .
 .Sh AUTHORS
 .An Roy Marples Aq Mt r...@marples.name
 .Sh BUGS

Modified: head/contrib/openresolv/resolvconf.in
==============================================================================
--- head/contrib/openresolv/resolvconf.in       Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/resolvconf.in       Wed Jul 20 03:52:04 2016        
(r303062)
@@ -25,9 +25,12 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 RESOLVCONF="$0"
+OPENRESOLV_VERSION="3.8.1"
 SYSCONFDIR=@SYSCONFDIR@
 LIBEXECDIR=@LIBEXECDIR@
 VARDIR=@VARDIR@
+RCDIR=@RCDIR@
+RESTARTCMD=@RESTARTCMD@
 
 # Disregard dhcpcd setting
 unset interface_order state_dir
@@ -71,55 +74,45 @@ error_exit()
 usage()
 {
        cat <<-EOF
-       Usage: ${RESOLVCONF##*/} [options]
+       Usage: ${RESOLVCONF##*/} [options] command [argument]
 
        Inform the system about any DNS updates.
 
-       Options:
+       Commands:
          -a \$INTERFACE    Add DNS information to the specified interface
                           (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
-         -f               Ignore non existant interfaces
-         -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
+         -h               Show this help cruft
          -i [\$PATTERN]    Show interfaces that have supplied DNS information
                    optionally from interfaces that match the specified
                    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
                           the console
-         -h               Show this help cruft
+         -V [\$PATTERN]    Same as -v, but only uses configuration in
+                          $SYSCONFDIR/resolvconf.conf
        EOF
        [ -z "$1" ] && exit 0
        echo
        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
 # in resolv.conf(5)
 # If you think otherwise, capture a DNS trace and you'll see libc
@@ -159,7 +152,10 @@ parse_resolv()
                                        private=false
                                        for p in $private_interfaces; do
                                                case "$iface" in
-                                               "$p"|"$p":*) private=true; 
break;;
+                                               "$p"|"$p":*)
+                                                       private=true
+                                                       break
+                                                       ;;
                                                esac
                                        done
                                fi
@@ -261,6 +257,108 @@ config_mkdirs()
        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()
 {
        [ -d "$IFACEDIR" ] || return 0
@@ -320,6 +418,7 @@ 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
@@ -334,6 +433,7 @@ list_resolv()
                        printf %s "$i "
                else
                        echo_resolv "$i"
+                       echo
                fi
                [ $? = 0 -a "$retval" = 1 ] && retval=0
        done
@@ -499,7 +599,7 @@ make_vars()
 
 force=false
 VFLAG=
-while getopts a:Dd:fhIilm:puvVx OPT; do
+while getopts a:Dd:fhIilm:pRruvVx OPT; do
        case "$OPT" in
        f) force=true;;
        h) usage;;
@@ -541,6 +641,18 @@ if [ "$cmd" = l -o "$cmd" = i ]; then
        exit $?
 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
 if [ "$cmd" = v -o -n "$VFLAG" ]; then
        make_vars "$iface"
@@ -765,13 +877,17 @@ case "${resolvconf:-YES}" in
 *) exit 0;;
 esac
 
+# Try and detect a suitable init system for our scripts
+detect_init
+export RESTARTCMD RCDIR _NOINIT_WARNED
+
 eval "$(make_vars)"
 export RESOLVCONF DOMAINS SEARCH NAMESERVERS LOCALNAMESERVERS
 : ${list_resolv:=list_resolv -l}
 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

Modified: head/contrib/openresolv/unbound.in
==============================================================================
--- head/contrib/openresolv/unbound.in  Wed Jul 20 03:13:02 2016        
(r303061)
+++ head/contrib/openresolv/unbound.in  Wed Jul 20 03:52:04 2016        
(r303062)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (c) 2009-2014 Roy Marples
+# Copyright (c) 2009-2016 Roy Marples
 # All rights reserved
 
 # unbound subscriber for resolvconf
@@ -37,7 +37,6 @@ NL="
 
 : ${unbound_pid:=/var/run/unbound.pid}
 : ${unbound_service:=unbound}
-: ${unbound_restart:=@RESTARTCMD ${unbound_service}@}
 newconf="# Generated by resolvconf$NL"
 
 for d in $DOMAINS; do
@@ -71,6 +70,18 @@ else
        @SBINDIR@/resolvconf -D "$unbound_conf"
 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" ] || \
        [ "$(cat "$unbound_conf")" != "$(printf %s "$newconf")" ]
 then
@@ -78,9 +89,9 @@ then
        # 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
+                       restart_unbound
                fi
        else
-               eval $unbound_restart
+               restart_unbound
        fi
 fi
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to