We need to process dynamic interfaces without metrics before ones
[openresolv] / dnsmasq.in
old mode 100755 (executable)
new mode 100644 (file)
index 5ae8b86..bac90e1
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright 2007-2008 Roy Marples
+# Copyright 2007-2009 Roy Marples
 # All rights reserved
 
 # dnsmasq subscriber for resolvconf
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-# This is very important!
-# We assume that we are a local dns cache - after all, why would a server
-# use resolvconf?
-# Now that we have assumed this, we also assume that generic DHCP clients
-# will enter their domains and search domains ONLY in the "search" field
-# in their resolv.confs and VPN clients will put the domain they are for
-# into the domain field only.
-# This allows dnsmasq to forward domains for a specific VPN domain to the
-# VPN nameserver and everything else to the standard name servers.
-
-# A sample dnsmasq config that works as above is like so.
-# NOTE: The loopback interface on some systems maybe lo0.
-#domain-needed
-#interface=lo
-#resolv-file=@PREFIX@/etc/dnsmasq-resolv.conf
-#conf-file=@PREFIX@/etc/dnsmasq-resolvconf.conf
-
-# The last step is to configure dns configuration for /etc/resolv.conf
-# for the lo interface. You can do this in resolvconf as well by adding
-#nameserver 127.0.0.1
-# to resolv.conf.d/base
-
-# Load our variables from resolvconf
-eval "$(resolvconf -v)"
+[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0
+. "@SYSCONFDIR@/resolvconf.conf" || exit 1
+[ -z "${dnsmasq_conf}" -o -z "${dnsmasq_resolv}" ] && exit 0
+eval "$(${RESOLVCONF:-resolvconf} -v)"
 
 PREFIX=@PREFIX@
-DNSMASQRESOLV="${PREFIX}/etc/dnsmasq-resolv.conf"
-DNSMASQCONF="${PREFIX}/etc/dnsmasq-resolvconf.conf"
-DNSMASQPID=/var/run/dnsmasq.pid
+DNSMASQPID="${dnsmasq_pid:-/var/run/dnsmasq.pid}"
 
 NEWCONF="# Generated by resolvconf\n"
 NEWRESOLV="${NEWCONF}"
@@ -66,26 +44,28 @@ NEWRESOLV="${NEWCONF}"
 # Check for DBus support in the binary
 
 DBUS=no
-DBUSPID=/var/run/dbus/dbus.pid
+DBUSPID="${dbus_pid:-/var/run/dbus/dbus.pid}"
 [ -s "${DBUSPID}" ] || DBUSPID=/var/run/dbus.pid
 [ -s "${DBUSPID}" ] || DBUSPID=/var/run/dbus/pid
 if [ -s "${DBUSPID}" -a -s ${DNSMASQPID} ]; then
        if dnsmasq --version 2>/dev/null | \
-               grep -q "^Compile time options.*[[:space:]]DBus[[:space:]]" \
-               ; then
+               grep -q "^Compile time options.*[[:space:]]DBus[[:space:]]"
+       then
                # Sanity - check that dnsmasq and dbus are running
-               if kill -0 $(cat "${DBUSPID}") 2>/dev/null \
-                       && kill -0 $(cat ${DNSMASQPID}) 2>/dev/null; then
+               if kill -0 $(cat "${DBUSPID}") 2>/dev/null && \
+                       kill -0 $(cat ${DNSMASQPID}) 2>/dev/null
+               then
                        DBUS=yes
-                       NEWCONF="${NEWCONF}\n# Domain specific servers will be sent over dbus\nenable-dbus\n"
+                       NEWCONF="${NEWCONF}\n# Domain specific servers will"
+                       NEWCONF="${NEWCONF} be sent over dbus\nenable-dbus\n"
                fi
        fi
 fi
 
 for N in ${NAMESERVERS}; do
        case "\n${NEWRESOLV}\n" in
-               *"\nnameserver ${N}\n");;
-               *) NEWRESOLV="${NEWRESOLV}nameserver ${N}\n";;
+       *"\nnameserver ${N}\n");;
+       *) NEWRESOLV="${NEWRESOLV}nameserver ${N}\n";;
        esac
 done
 
@@ -104,7 +84,8 @@ for D in ${DOMAINS}; do
                        else
                                IFS=$OIFS
                        fi
-                       DBUSDEST="${DBUSDEST} uint32:$(printf "%d" ${NUM}) string:${DN}"
+                       DBUSDEST="${DBUSDEST} uint32:$(printf "%u" ${NUM})"
+                       DBUSDEST="${DBUSDEST} string:${DN}"
                else
                        NEWCONF="${NEWCONF}server=/${DN}/${NS%%,*}\n"
                fi
@@ -114,23 +95,23 @@ for D in ${DOMAINS}; do
 done
 
 RELOAD="no"
-if [ -e "${DNSMASQCONF}" ]; then
-       if [ "$(cat "${DNSMASQCONF}")" != "$(printf "${NEWCONF}")" ]; then
+if [ -f "${dnsmasq_conf}" ]; then
+       if [ "$(cat "${dnsmasq_conf}")" != "$(printf "${NEWCONF}")" ]; then
                RELOAD="yes"
-               printf "${NEWCONF}" > "${DNSMASQCONF}"
+               printf "${NEWCONF}" > "${dnsmasq_conf}"
        fi
 else
        RELOAD="yes"
-       printf "${NEWCONF}" > "${DNSMASQCONF}"
+       printf "${NEWCONF}" > "${dnsmasq_conf}"
 fi
-if [ -e "${DNSMASQRESOLV}" ]; then
-       if [ "$(cat "${DNSMASQRESOLV}")" != "$(printf "${NEWRESOLV}")" ]; then
+if [ -f "${dnsmasq_resolv}" ]; then
+       if [ "$(cat "${dnsmasq_resolv}")" != "$(printf "${NEWRESOLV}")" ]; then
                RELOAD="yes"
-               printf "${NEWRESOLV}" > "${DNSMASQRESOLV}"
+               printf "${NEWRESOLV}" > "${dnsmasq_resolv}"
        fi
 else
        # dnsmasq polls this file so no need to set RELOAD="yes"
-       printf "${NEWRESOLV}" > "${DNSMASQRESOLV}"
+       printf "${NEWRESOLV}" > "${dnsmasq_resolv}"
 fi
 
 [ "${RELOAD}" = "yes" ] && resolvconf -s dnsmasq restart