#!/bin/sh -e
#
# Test if the DNS server works.

if test -r /etc/skolelinux/config ; then
    mv /etc/skolelinux/config /etc/debian-edu/config
fi

if test -r /etc/debian-edu/config ; then
    . /etc/debian-edu/config
fi

# In case we are a standalone profile, just exit gracefully
if echo "$PROFILE" | grep -q Standalone ; then
	exit 0
fi

# The internal DNS server is called 'domain'
dnsserver='domain'

if echo "$PROFILE" | grep -q Main-Server ; then
    dnsserver=localhost
fi

test_addr() {
    severity=$1
    hostinfo=$2
    host=`echo $hostinfo | cut -d: -f1`
    ip=`echo $hostinfo | cut -d: -f2`

   #echo "Testing '$host' '$ip'"
   case  `dpkg -S /usr/bin/host |cut -d":" -f1` in
      #bind9-host
      bind9-host)
          forwardip=`host  "$host" "$dnsserver" 2>/dev/null | tail -n1 | grep -v 'CNAME' | awk '{ print $4; }'`
          reversename=`host  "$ip" "$dnsserver" 2>/dev/null | grep 'pointer' | awk '{ print $5; }' | sed -e 's/\.$//g' `
	  ;;
      #default to old way
      host | *) 
          forwardip=`host -q  "$host" "$dnsserver" 2>/dev/null | grep -v 'CNAME' | awk '{ print $3; }'`
          reversename=`host -q  "$ip" "$dnsserver" 2>/dev/null | grep '^Name:' | awk '{ print $2; }'`
	  ;;
   esac


    if test "$ip" = "$forwardip" ; then
	echo "success: $0: DNS lookup for '$host' on server '$dnsserver' works ('$forwardip')."
    else
	echo "$severity: $0: Unable to look up '$host' on server '$dnsserver' ('$forwardip')."
    fi

    if test "$host" = "$reversename" ; then
	echo "success: $0: DNS lookup for '$ip' on server '$dnsserver' works ('$reversename')."
    else
	shortname=`echo $reversename | cut -d. -f1`
	if test "$host" = "$shortname" ; then
	    echo "success: $0: DNS lookup for '$ip' on server '$dnsserver' works ('$reversename')."
	else
	    echo "$severity: $0: Unable to look up '$ip' on server '$dnsserver' ('$reversename' != '$host')."
	fi
    fi
}


# Check if we have internet connectivity
for hostinfo in \
    www.uio.no:129.240.4.44
  do
    test_addr info $hostinfo
done

# Check if forward and reverse is correct
for hostinfo in \
    tjener:10.0.2.2 \
    tjener.intern:10.0.2.2 \
    ltspserver00:10.0.2.10 \
    static00:10.0.2.50 \
    dhcp001.intern:10.0.2.101 \
    ltsp010:192.168.0.10 \
    ltsp010.intern:192.168.0.10
  do
    test_addr error $hostinfo
done
