#!/bin/sh

# 0dns-up by John Hasler 4 Apr 1999.  You may treat this program as if it
# was in the public domain.

# Rev. Dec 22 1999 to put dynaminc nameservers last.

# Rev. Aug 20 2001 to use patch from Sergio Gelato <Sergio.Gelato@astro.su.se>.

# 0dns-up sets up /etc/resolv.conf for the provider being connected to.  In
# conjunction with pppd's usepeerdns option it also handles dynamic dns.
# It expects to be passed the provider name in PPP_IPPARAM.

# If pppconfig has been removed we are not supposed to do anything.

test -f /usr/sbin/pppconfig || exit 0

PROVIDER="$PPP_IPPARAM"
ETC="/etc"
PPPRESOLV="$ETC/ppp/resolv"
TEMPRESOLV="resolv.conf.ppp.temp$$"
RESOLVBAK="resolv.conf.ppp.bak"
RESOLVCONF="resolv.conf"

# Security: we sit in the $ETC directory while we do our work.

cd "$ETC" || exit 1

# We better not do anything if resolv.conf.bak already exists.

test -f "$RESOLVBAK" && exit 0

# Put the resolv.conf for this provider (if it exists) in a temp file.
# If we are using dynamic dns it will be empty or contain any resolver
# options the user added.  Otherwise it will be a complete resolv.conf for
# this provider.

# Security: make sure the temp file has the right permissions from the outset.
# This script should run as root, and . should only be writable by root.
test -f $TEMPRESOLV && /bin/rm -f $TEMPRESOLV
umask 022

# We trust $PPPRESOLV/$PROVIDER.
test -f "$PPPRESOLV/$PROVIDER" && cat $PPPRESOLV/$PROVIDER > $TEMPRESOLV

# USEPEERDNS, DNS1, and DNS2 are variables exported by pppd.  Do we have
# usepeerdns and a couple of nameservers?  If so, put a couple of
# nameserver lines in the temp file.

if [ "$USEPEERDNS" ] && [ "$DNS1" ] ; then
    echo -e "\nnameserver $DNS1" >> $TEMPRESOLV
    if [ "$DNS2" ] ; then
        echo -e "\nnameserver $DNS2" >> $TEMPRESOLV
    fi
fi

# If we haven't created TEMPRESOLV by now, just exit.

test -f $TEMPRESOLV || exit 0

# Back up resolv.conf, and replace it with the new resolv.conf from the temp file.
# Remember that the old resolv.conf might be a symbolic link.

if test -L $RESOLVCONF; then
    # Assume GNU cp.
    /bin/cp -dp $RESOLVCONF $RESOLVBAK || exit 1
elif test -f $RESOLVCONF; then
    /bin/ln $RESOLVCONF $RESOLVBAK || exit 1
elif test -e $RESOLVCONF; then
    exit 1
fi
/bin/mv $TEMPRESOLV $RESOLVCONF
exit 0


# Tell nscd about what we've done.
test -x /usr/sbin/nscd || exit 0
/usr/sbin/nscd -i hosts || exit 0


