From owner-svn-src-vendor@FreeBSD.ORG Fri Mar 18 10:35:54 2011 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 736F21065677; Fri, 18 Mar 2011 10:35:54 +0000 (UTC) (envelope-from ume@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 618E18FC17; Fri, 18 Mar 2011 10:35:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2IAZsBM056690; Fri, 18 Mar 2011 10:35:54 GMT (envelope-from ume@svn.freebsd.org) Received: (from ume@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2IAZs3g056681; Fri, 18 Mar 2011 10:35:54 GMT (envelope-from ume@svn.freebsd.org) Message-Id: <201103181035.p2IAZs3g056681@svn.freebsd.org> From: Hajimu UMEMOTO Date: Fri, 18 Mar 2011 10:35:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r219732 - in vendor/openresolv: . dist X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Mar 2011 10:35:54 -0000 Author: ume Date: Fri Mar 18 10:35:54 2011 New Revision: 219732 URL: http://svn.freebsd.org/changeset/base/219732 Log: Import openresolv-3.4.1. Added: vendor/openresolv/ vendor/openresolv/dist/ vendor/openresolv/dist/Makefile (contents, props changed) vendor/openresolv/dist/README vendor/openresolv/dist/configure vendor/openresolv/dist/dnsmasq.in (contents, props changed) vendor/openresolv/dist/libc.in (contents, props changed) vendor/openresolv/dist/named.in (contents, props changed) vendor/openresolv/dist/pdnsd.in (contents, props changed) vendor/openresolv/dist/resolvconf.8.in (contents, props changed) vendor/openresolv/dist/resolvconf.conf (contents, props changed) vendor/openresolv/dist/resolvconf.conf.5.in (contents, props changed) vendor/openresolv/dist/resolvconf.in (contents, props changed) vendor/openresolv/dist/unbound.in (contents, props changed) Added: vendor/openresolv/dist/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/Makefile Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,66 @@ +include config.mk + +NAME= openresolv +VERSION= 3.4.1 +PKG= ${NAME}-${VERSION} + +INSTALL?= install +SED?= sed + +BINMODE?= 0755 +DOCMODE?= 0644 +MANMODE?= 0444 + +RESOLVCONF= resolvconf resolvconf.8 resolvconf.conf.5 +SUBSCRIBERS= libc dnsmasq named pdnsd unbound +TARGET= ${RESOLVCONF} ${SUBSCRIBERS} +SRCS= ${TARGET:C,$,.in,} # pmake +SRCS:= ${TARGET:=.in} # gmake + +SED_PREFIX= -e 's:@PREFIX@:${PREFIX}:g' +SED_SYSCONFDIR= -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' +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' + +.SUFFIXES: .in + +all: ${TARGET} + +.in: + ${SED} ${SED_PREFIX} ${SED_SYSCONFDIR} ${SED_LIBEXECDIR} \ + ${SED_VARDIR} ${SED_RCDIR} ${SED_RESTARTCMD} \ + $< > $@ + +clean: + rm -f ${TARGET} openresolv-${VERSION}.tar.bz2 + +distclean: clean + rm -f config.mk + +installdirs: + +install: ${TARGET} + ${INSTALL} -d ${DESTDIR}${SBINDIR} + ${INSTALL} -m ${BINMODE} resolvconf ${DESTDIR}${SBINDIR} + ${INSTALL} -d ${DESTDIR}${SYSCONFDIR} + test -e ${DESTDIR}${SYSCONFDIR}/resolvconf.conf || \ + ${INSTALL} -m ${DOCMODE} resolvconf.conf ${DESTDIR}${SYSCONFDIR} + ${INSTALL} -d ${DESTDIR}${LIBEXECDIR} + ${INSTALL} -m ${DOCMODE} ${SUBSCRIBERS} ${DESTDIR}${LIBEXECDIR} + ${INSTALL} -d ${DESTDIR}${MANDIR}/man8 + ${INSTALL} -m ${MANMODE} resolvconf.8 ${DESTDIR}${MANDIR}/man8 + ${INSTALL} -d ${DESTDIR}${MANDIR}/man5 + ${INSTALL} -m ${MANMODE} resolvconf.conf.5 ${DESTDIR}${MANDIR}/man5 + +import: + rm -rf /tmp/${PKG} + ${INSTALL} -d /tmp/${PKG} + cp README ${SRCS} /tmp/${PKG} + +dist: import + cp configure Makefile resolvconf.conf /tmp/${PKG} + tar cvjpf ${PKG}.tar.bz2 -C /tmp ${PKG} + rm -rf /tmp/${PKG} + ls -l ${PKG}.tar.bz2 Added: vendor/openresolv/dist/README ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/README Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,11 @@ +openresolv is a resolvconf implementation which manages resolv.conf +You can find the latest version at http://roy.marples.name/projects/openresolv +It is written and maintained by Roy Marples + +This resolvconf implementation, along with its subscribers, work with a +POSIX compliant shell and userland utilities. It is designed to work without +tools such as sed as it *has* to work without /usr being available. + +On systems where resolvconf is expected to be used before /var/run is available +for writing, you can configure openresolv to write somewhere else, like say a +ramdisk. Added: vendor/openresolv/dist/configure ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/configure Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,186 @@ +#!/bin/sh +# Try and be like autotools configure, but without autotools + +# Ensure that we do not inherit these from env +OS= +BUILD= +HOST= +TARGET= +RESTARTCMD= +RCDIR= + +for x; do + opt=${x%%=*} + var=${x#*=} + case "$opt" in + --os|OS) OS=$var;; + --with-cc|CC) CC=$var;; + --debug) DEBUG=$var;; + --disable-debug) DEBUG=no;; + --enable-debug) DEBUG=yes;; + --prefix) prefix=$var;; + --sysconfdir) SYSCONFDIR=$var;; + --bindir|--sbindir) SBINDIR=$var;; + --libexecdir) LIBEXECDIR=$var;; + --statedir|--localstatedir) STATEDIR=$var;; + --dbdir) DBDIR=$var;; + --rundir) RUNDIR=$var;; + --mandir) MANDIR=$var;; + --with-ccopts|CFLAGS) CFLAGS=$var;; + CPPFLAGS) CPPFLAGS=$var;; + --build) BUILD=$var;; + --host) HOST=$var;; + --target) TARGET=$var;; + --libdir) LIBDIR=$var;; + --restartcmd) RESTARTCMD=$var;; + --includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";; + --datadir|--infodir) ;; # ignore autotools + --disable-maintainer-mode|--disable-dependency-tracking) ;; + --help) echo "See the README file for available options"; exit 0;; + *) echo "$0: WARNING: unknown option $opt" >&2;; + esac +done + +: ${SED:=sed} + +: ${PREFIX:=$prefix} +: ${SYSCONFDIR:=$PREFIX/etc} +: ${SBINDIR:=$PREFIX/sbin} +: ${LIBEXECDIR:=$PREFIX/libexec} +: ${STATEDIR:=/var} +: ${RUNDIR:=$STATEDIR/run} +: ${MANDIR:=${PREFIX:-/usr}/share/man} + +eval SYSCONFDIR="$SYSCONFDIR" +eval SBINDIR="$SBINDIR" +eval LIBEXECDIR="$LIBEXECDIR/resolvconf" +eval VARDIR="$RUNDIR/resolvconf" +eval MANDIR="$MANDIR" + +CONFIG_MK=config.mk + +if [ -z "$BUILD" ]; then + BUILD=`uname -m`-`uname -s | tr '[:upper:]' '[:lower:]'` +fi +if [ -z "$HOST" ]; then + [ -z "$TARGET" ] && TARGET=$BUILD + HOST=$TARGET +fi +if [ -z "$TARGET" ]; then + [ -z "$HOST" ] && HOST=$BUILD + TARGET=$HOST +fi + +# Debian and Slackware have linux in different places when dealing with +# autoconf, so we deal with that here. +if [ -z "$OS" ]; then + case "$TARGET" in + *-linux-*|linux-*|*-linux|linux) OS=linux;; + esac +fi + +if [ -z "$OS" ]; then + # Derive OS from cpu-manufacturer-os-kernel + CPU=${TARGET%%-*} + REST=${TARGET#*-} + if [ "$CPU" != "$REST" ]; then + MANU=${REST%%-*} + REST=${REST#*-} + if [ "$MANU" != "$REST" ]; then + OS=${REST%%-*} + REST=${REST#*-} + if [ "$OS" != "$REST" ]; then + KERNEL=${REST%%-*} + else + # 3 tupple + KERNEL=$OS + OS=$MANU + MANU= + fi + else + # 2 tupple + OS=$MANU + MANU= + fi + fi +fi + +echo "Configuring openresolv for ... $OS" +rm -rf $CONFIG_MK +echo "# $OS" >$CONFIG_MK + +for x in SYSCONFDIR SBINDIR LIBEXECDIR VARDIR MANDIR; do + eval v=\$$x + # Make files look nice for import + l=$((10 - ${#x})) + unset t + [ $l -gt 3 ] && t=" " + echo "$x=$t $v" >>$CONFIG_MK +done + +if [ -e /etc/arch-release -a -d /etc/rc.d ]; then + echo "Overriding service status check for Arch Linux" + RCDIR=/etc/rc.d + RESTARTCMD="[ -e /var/run/daemons/\1 ] \&\& /etc/rc.d/\1 restart" + echo "yes" +fi + +if [ -z "$RESTARTCMD" ]; then + printf "Checking for OpenRC ... " + if [ -x /sbin/rc-service ]; then + RESTARTCMD="/sbin/rc-service -e \1 \&\& /sbin/rc-service \1 -- -Ds restart" + 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="/usr/sbin/invoke-rc.d --quiet \1 status >/dev/null 2>\&1 \&\& /usr/sbin/invoke-rc.d \1 restart" + 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="/sbin/service \1 \&\& /sbin/service \1 restart" + 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="$x/\1 status >/dev/null 2>\&1 \&\& $x/\1 restart" + echo "yes" + break + else + echo "no" + fi + done +fi + +if [ -z "$RESTARTCMD" ]; then + echo "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" +echo " LIBEXECDIR = $LIBEXECDIR" +echo " VARDIR = $RUNDIR" +echo " MANDIR = $MANDIR" +echo Added: vendor/openresolv/dist/dnsmasq.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/dnsmasq.in Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,125 @@ +#!/bin/sh +# Copyright (c) 2007-2009 Roy Marples +# All rights reserved + +# dnsmasq subscriber for resolvconf + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 +. "@SYSCONFDIR@/resolvconf.conf" || exit 1 +[ -z "$dnsmasq_conf" -a -z "$dnsmasq_resolv" ] && exit 0 +[ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + +: ${dnsmasq_pid:=/var/run/dnsmasq.pid} +[ -s "$dnsmasq_pid" ] || dnsmasq_pid=/var/run/dnsmasq/dnsmasq.pid +: ${dnsmasq_service:=dnsmasq} +: ${dnsmasq_restart:=@RESTARTCMD ${dnsmasq_service}@} +newconf="# Generated by resolvconf\n" +newresolv="$newconf" + +# Using dbus means that we never have to restart the daemon +# This is important as it means we should not drop DNS queries +# whilst changing DNS options around. However, dbus support is optional +# so we need to validate a few things first. +# Check for DBus support in the binary +dbus=false +: ${dbus_pid:=/var/run/dbus/dbus.pid} +[ -s "$dbus_pid" ] || dbus_pid=/var/run/dbus.pid +[ -s "$dbus_pid" ] || dbus_pid=/var/run/dbus/pid +if [ -s "$dbus_pid" -a -s "$dnsmasq_pid" ]; then + if dnsmasq --version 2>/dev/null | \ + grep -q "^Compile time options.*[[:space:]]DBus[[:space:]]" + then + # Sanity - check that dnsmasq and dbus are running + if kill -0 $(cat "$dbus_pid") 2>/dev/null && \ + kill -0 $(cat "$dnsmasq_pid") 2>/dev/null + then + dbus=true + newconf="$newconf\n# Domain specific servers will" + newconf="$newconf be sent over dbus\nenable-dbus\n" + fi + fi +fi + +for n in $NAMESERVERS; do + newresolv="${newresolv}nameserver $n\n" +done + +dbusdest= +for d in $DOMAINS; do + dn="${d%%:*}" + ns="${d#*:}" + while [ -n "$ns" ]; do + if $dbus; then + SIFS=${IFS-y} OIFS=$IFS + IFS=. + set -- ${ns%%,*} + num="0x$(printf "%02x" $1 $2 $3 $4)" + if [ "$SIFS" = yi ]; then + unset IFS + else + IFS=$OIFS + fi + dbusdest="$dbusdest uint32:$(printf "%u" $num)" + dbusdest="$dbusdest string:$dn" + else + newconf="${newconf}server=/$dn/${ns%%,*}\n" + fi + [ "$ns" = "${ns#*,}" ] && break + ns="${ns#*,}" + done +done + +changed=false +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 +fi + +if $changed; then + eval $dnsmasq_restart +fi +if $dbus; then + $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 \ + $dbusdest +fi Added: vendor/openresolv/dist/libc.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/libc.in Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,168 @@ +#!/bin/sh +# Copyright (c) 2007-2009 Roy Marples +# All rights reserved + +# libc subscriber for resolvconf + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +SYSCONFDIR=@SYSCONFDIR@ +LIBEXECDIR=@LIBEXECDIR@ +VARDIR=@VARDIR@ +IFACEDIR="$VARDIR/interfaces" + +# sed may not be available, and this is faster on small files +key_get_value() +{ + local key="$1" value= x= line= + + shift + if [ $# -eq 0 ]; then + while read line; do + case "$line" in + "$key"*) echo "${line##$key}";; + esac + done + else + for x; do + while read line; do + case "$line" in + "$key"*) echo "${line##$key}";; + esac + done < "$x" + done + fi +} + +# Support original resolvconf configuration layout +# as well as the openresolv config file +if [ -f "$SYSCONFDIR"/resolvconf.conf ]; then + . "$SYSCONFDIR"/resolvconf.conf +elif [ -d "$SYSCONFDIR"/resolvconf ]; then + SYSCONFDIR="$SYSCONFDIR/resolvconf/resolv.conf.d" + base="$SYSCONFDIR/resolv.conf.d/base" + if [ -f "$base" ]; then + name_servers="$(key_get_value "nameserver " "$base")" + search_domains="$(key_get_value "search " "$base")" + if [ -z "$search_domains" ]; then + search_domains="$(key_get_value "domain " "$base")" + fi + resolv_conf_options="$(key_get_value "options " "$base")" + fi + if [ -f "$SYSCONFDIR"/resolv.conf.d/head ]; then + resolv_conf_head="$(cat "${SYSCONFDIR}"/resolv.conf.d/head)" + fi + if [ -f "$SYSCONFDIR"/resolv.conf.d/tail ]; then + resolv_conf_tail="$(cat "$SYSCONFDIR"/resolv.conf.d/tail)" + fi +fi +: ${resolv_conf:=/etc/resolv.conf} +: ${libc_service:=nscd} +: ${libc_restart:=@RESTARTCMD ${libc_service}@} +: ${list_resolv:=@PREFIX@/sbin/resolvconf -l} +if [ "${resolv_conf_head-x}" = x -a -f "$SYSCONFDIR"/resolv.conf.head ]; then + resolv_conf_head="$(cat "${SYSCONFDIR}"/resolv.conf.head)" +fi +if [ "${resolv_conf_tail-x}" = x -a -f "$SYSCONFDIR"/resolv.conf.tail ]; then + resolv_conf_tail="$(cat "$SYSCONFDIR"/resolv.conf.tail)" +fi + +uniqify() +{ + local result= + while [ -n "$1" ]; do + case " $result " in + *" $1 "*);; + *) result="$result $1";; + esac + shift + done + echo "${result# *}" +} + +case "${resolv_conf_passthrough:-NO}" in +[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + newest= + for conf in "$IFACEDIR"/*; do + if [ -z "$newest" -o "$conf" -nt "$newest" ]; then + newest="$conf" + fi + done + [ -z "$newest" ] && exit 0 + newconf="$(cat "$newest")\n" + ;; +*) + [ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + newsearch="$(uniqify $search_domains $SEARCH $search_domains_append)" + NS="$LOCALNAMESERVERS $NAMESERVERS" + newns="$(uniqify $name_servers $NS $name_servers_append)" + + # Hold our new resolv.conf in a variable to save on temporary files + newconf="# Generated by resolvconf\n" + if [ -n "$resolv_conf_head" ]; then + newconf="$newconf$resolv_conf_head\n" + fi + [ -n "$newsearch" ] && newconf="${newconf}search $newsearch\n" + for n in $newns; do + newconf="${newconf}nameserver $n\n" + done + + # Now get any configured options + opts="$resolv_conf_options${resolv_conf_options:+ }" + opts="$opts$($list_resolv | key_get_value "options ")" + if [ -n "$opts" ]; then + newconf="${newconf}options" + for opt in $(uniqify $opts); do + newconf="${newconf} $opt" + done + newconf="$newconf\n" + fi + + if [ -n "$resolv_conf_tail" ]; then + newconf="$newconf$resolv_conf_tail\n" + fi + ;; +esac + +# Check if the file has actually changed or not +if [ -e "$resolv_conf" ]; then + [ "$(cat "$resolv_conf")" = "$(printf "$newconf")" ] && exit 0 +fi + +# Create our resolv.conf now +(umask 022; printf "$newconf" >"$resolv_conf") +eval $libc_restart + +retval=0 +# Notify users of the resolver +for script in "$LIBEXECDIR"/libc.d/*; do + if [ -f "$script" ]; then + if [ -x "$script" ]; then + "$script" "$@" + else + (. "$script" "$@") + fi + retval=$(($retval + $?)) + fi +done +exit $retval Added: vendor/openresolv/dist/named.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/named.in Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,94 @@ +#!/bin/sh +# Copyright (c) 2007-2009 Roy Marples +# All rights reserved + +# named subscriber for resolvconf + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 +. "@SYSCONFDIR@/resolvconf.conf" || exit 1 +[ -z "$named_zones" -a -z "$named_options" ] && exit 0 +[ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + +# Platform specific kludges +if [ -z "$named_service" -a -z "$named_restart" -a \ + -d "@RCDIR@" -a ! -x "@RCDIR@"/named ] +then + if [ -x "@RCDIR@"/bind9 ]; then + # Debian and derivatives + named_service=bind9 + fi +fi +: ${named_service:=named} +: ${named_restart:=@RESTARTCMD ${named_service}@} +newoptions="# Generated by resolvconf\n" +newzones="$newoptions" + +forward= +for n in $NAMESERVERS; do + case "$forward" in + *"\n\t$n;"*);; + *) forward="$forward\n\t$n;";; + esac +done +if [ -n "$forward" ]; then + newoptions="${newoptions}forward first;\nforwarders {$forward\n};\n" +fi + +for d in $DOMAINS; do + newzones="${newzones}zone \"${d%%:*}\" {\n" + newzones="$newzones\ttype forward;\n" + newzones="$newzones\tforward first;\n\tforwarders {\n" + ns="${d#*:}" + while [ -n "$ns" ]; do + newzones="$newzones\t\t${ns%%,*};\n" + [ "$ns" = "${ns#*,}" ] && break + ns="${ns#*,}" + done + newzones="$newzones\t};\n};\n" +done + +# No point in changing files or reloading bind if the end result has not +# changed +changed=false +if [ -n "$named_options" ]; then + if [ ! -f "$named_options" ] || \ + [ "$(cat "$named_options")" != "$(printf "$newoptions")" ] + then + printf "$newoptions" >"$named_options" + changed=true + fi +fi +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 + eval $named_restart +fi Added: vendor/openresolv/dist/pdnsd.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/pdnsd.in Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,153 @@ +#!/bin/sh +# Copyright (c) 2010 Roy Marples +# All rights reserved + +# pdnsd subscriber for resolvconf + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 +. "@SYSCONFDIR@/resolvconf.conf" || exit 1 +[ -z "$pdnsd_conf" -a -z "$pdnsd_resolv" ] && exit 0 +[ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + +: ${pdnsd_restart:=pdnsd-ctl config $pdnsd_conf} +signature="# Generated by resolvconf" +signature_end="# End of resolvconf" + +# We normally use sed to remove markers from a configuration file +# but sed may not always be available at the time. +remove_markers() +{ + local m1="$1" m2="$2" x= line= in_marker=0 + + shift; shift + if type sed >/dev/null 2>&1; then + sed "/^$m1/,/^$m2/d" $@ + else + for x; do + while read line; do + case "$line" in + "$m1"*) in_marker=1;; + "$m2"*) in_marker=0;; + *) [ $in_marker = 0 ] && echo "$line";; + esac + done < "$x" + done + fi +} + +# Compare two files +# If different, replace first with second otherwise remove second +change_file() +{ + if [ -e "$1" ]; then + if type cmp >/dev/null 2>&1; then + cmp -s "$1" "$2" + elif type diff >/dev/null 2>&1; then + diff -q "$1" "$2" >/dev/null + else + # Hopefully we're only working on small text files ... + [ "$(cat "$1")" = "$(cat "$2")" ] + fi + if [ $? -eq 0 ]; then + rm -f "$2" + return 1 + fi + fi + cat "$2" > "$1" + rm -f "$2" + return 0 +} + +newresolv="# Generated by resolvconf\n" +changed=false + +if [ -n "$pdnsd_resolv" ]; then + for n in $NAMESERVERS; do + newresolv="${newresolv}nameserver $n\n" + done +fi + +if [ -n "$pdnsd_conf" ]; then + cf="$pdnsd_conf.new" + newconf= + + if [ -z "$pdnsd_resolv" ]; then + newconf="${newconf}server {\n" + newconf="${newconf}\tlabel=resolvconf;\n" + if [ -n "$NAMESERVERS" ]; then + newconf="${newconf}\tip=" + first=true + for n in $NAMESERVERS; do + if $first; then + first=false + else + newconf="${newconf}," + fi + newconf="$newconf$n" + done + newconf="${newconf};\n" + fi + newconf="${newconf}}\n" + fi + + for d in $DOMAINS; do + newconf="${newconf}server {\n" + newconf="${newconf}\tinclude=.${d%%:*}.;\n" + newconf="${newconf}\tpolicy=excluded;\n" + newconf="${newconf}\tip=" + ns="${d#*:}" + while [ -n "$ns" ]; do + newconf="${newconf}${ns%%,*}" + [ "$ns" = "${ns#*,}" ] && break + ns="${ns#*,}" + newconf="${newconf}," + done + newconf="${newconf};\n}\n" + done + + rm -f "$cf" + remove_markers "$signature" "$signature_end" "$pdnsd_conf" > "$cf" + if [ -n "$newconf" ]; then + echo "$signature" >> "$cf" + printf "$newconf" >> "$cf" + echo "$signature_end" >> "$cf" + fi + if change_file "$pdnsd_conf" "$cf"; then + changed=true + fi +fi + +if [ -n "$pdnsd_resolv" ]; then + if [ ! -f "$pdnsd_resolv" ] || \ + [ "$(cat "$pdnsd_resolv")" != "$(printf "$newresolv")" ] + then + changed=true + printf "$newresolv" >"$pdnsd_resolv" + fi +fi + +if $changed; then + eval $pdnsd_restart +fi Added: vendor/openresolv/dist/resolvconf.8.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/openresolv/dist/resolvconf.8.in Fri Mar 18 10:35:54 2011 (r219732) @@ -0,0 +1,240 @@ +.\" Copyright (c) 2007-2009 Roy Marples +.\" All rights reserved +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd December 3, 2009 +.Dt RESOLVCONF 8 SMM +.Os +.Sh NAME +.Nm resolvconf +.Nd a framework for managing multiple DNS configurations +.Sh SYNOPSIS +.Nm +.Fl I +.Nm +.Op Fl m Ar metric +.Op Fl p +.Fl a Ar interface No < Ns Pa file +.Nm +.Op Fl f +.Fl d Ar interface +.Nm +.Fl il Ar pattern +.Nm +.Fl u +.Sh DESCRIPTION +.Nm +manages +.Xr resolv.conf 5 +files from multiple sources, such as DHCP and VPN clients. +Traditionally, the host runs just one client and that updates +.Pa /etc/resolv.conf . +More modern systems frequently have wired and wireless interfaces and there is +no guarantee both are on the same network. +With the advent of VPN and other +types of networking daemons, many things now contend for the contents of +.Pa /etc/resolv.conf . +.Pp +.Nm +solves this by letting the daemon send their +.Xr resolv.conf 5 +file to +.Nm +via +.Xr stdin 3 +with the argument +.Fl a Ar interface +instead of the filesystem. +.Nm +then updates +.Pa /etc/resolv.conf +as it thinks best. +When a local resolver other than libc is installed, such as +.Xr dnsmasq 8 +or +.Xr named 8 , +then +.Nm +will supply files that the resolver should be configured to include. +.Pp +.Nm +can mark an interfaces +.Pa resolv.conf +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. +See +.Xr resolvconf.conf 5 +for how to configure +.Nm +to use a local name server. +.Pp +When an interface goes down, it should then call +.Nm +with +.Fl d Ar interface +arguments to delete the +.Pa resolv.conf +file for the +.Ar interface . +.Pp +Here are some more options that +.Nm +has:- +.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. +Only really useful for deleting interfaces. +.It Fl i Ar pattern +List the interfaces, optionally matching +.Ar pattern , +we have +.Pa resolv.conf +files for. +.It Fl l Ar pattern +List the +.Pa resolv.conf +files we have. +If +.Ar pattern +is specified then we list the files for the interfaces 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 +to update all it's subscribers. +.Nm +does not update the subscribers when adding a resolv.conf that matches +what it already has for that interface. +.El +.Pp +.Nm +also has some options designed to be used by it's subscribers:- +.Bl -tag -width indent +.It Fl v +Echo variables DOMAINS, SEARCH and NAMESERVERS so that the subscriber can +configure the resolver easily. +.El +.Sh INTERFACE ORDERING +For +.Nm +to work effectively, it has to process the resolv.confs for the interfaces +in the correct order. +.Nm +first processes interfaces from the +.Sy interface_order +list, then interfaces without a metic and that match the +.Sy dynamic_order +list, then interfaces with a metric in order and finally the rest in +the operating systems lexical order. +See +.Xr resolvconf.conf 5 +for details on these lists. +.Sh IMPLEMENTATION NOTES *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***