#!/bin/sh

# This file is part of avahi.
# 
# avahi is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# avahi is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.

set -e

test "x$AVAHI_INTERFACE" != "x"

# Command line arguments:
#   $1 "+" if a new DNS server was found, "-" if one was removed
#   $2 DNS Server address
#   $3 interface index where this server was found on
#   $4 protocol number where this server was found on

# Available environment variables:
#
#   $AVAHI_INTERFACE               The interface name where this DNS server was found on
#   $AVAHI_INTERFACE_DNS_SERVERS   A whitespace seperated list of DNS servers on $AVAHI_INTERFACE
#   $AVAHI_DNS_SERVERS             The complete list of all DNS servers found on all interfaces

if [ -x /sbin/netconfig ]; then
    # SUSE method on 11.1+
    if [ -n "$AVAHI_INTERFACE_DNS_SERVERS" ]; then
	/sbin/netconfig modify -s avahi -i "$AVAHI_INTERFACE" <<-EOF
	INTERFACE='$AVAHI_INTERFACE'
	DNSSERVERS='$AVAHI_INTERFACE_DNS_SERVERS'
	EOF
    else
	/sbin/netconfig remove -s avahi -i "$AVAHI_INTERFACE"
    fi
elif [ -x /sbin/modify_resolvconf ] ; then
    # method for SUSE <= 11.0
    if [ -n "$AVAHI_DNS_SERVERS" ]; then
	/sbin/modify_resolvconf modify -s avahi -t - -p avahi-dnsconfd -n "$AVAHI_DNS_SERVERS" <<-EOF
	if you don't like avahi to update your Nameservers
	disable the avahi-dnsconfd init script
	EOF
    else
	/sbin/modify_resolvconf restore -s avahi
    fi
elif [ -x /sbin/resolvconf ] ; then

    # We have Debian's resolvconf tool

    if [ "x$AVAHI_INTERFACE_DNS_SERVERS" = "x" ] ; then
        /sbin/resolvconf -d "$AVAHI_INTERFACE.avahi"
    else
        for n in $AVAHI_INTERFACE_DNS_SERVERS ; do 
            echo "nameserver $n"
        done | /sbin/resolvconf -a "$AVAHI_INTERFACE.avahi"
    fi
else

    # No resolvconf tool available

    if [ "x$AVAHI_DNS_SERVERS" = "x" ] ; then
        test -f /etc/resolv.conf.avahi && mv /etc/resolv.conf.avahi /etc/resolv.conf
    else
        test -f /etc/resolv.conf.avahi || mv /etc/resolv.conf /etc/resolv.conf.avahi

        for n in $AVAHI_DNS_SERVERS ; do 
            echo "nameserver $n"
        done > /etc/resolv.conf
    fi
fi
