#!/bin/bash
# Author: Brendan Hide (http://swiftspirit.co.za/)
# Copyright: (c) Brendan Hide, released under the GPLv3 license
#            See http://www.gnu.org/licenses/gpl-3.0.html for the License details
# Name: mydigns
# Release Version: 0.4 (2009-04-10)
# TODO: long options - bash's builtin getopts doesn't support SunOS-style x(xlong) parameters
# Description: provides a DNS server from plaintext list to avoid tarnished DNS lookups

function rotate {
 old=`cat ~/.mydigns`
 #reform
 trodden="false"
 
 head -n 1 ~/.mydigns.all > ~/.mydigns.tmp
 
 cat ~/.mydigns.all | while read nameserver ; do
  if [ "$trodden" == "true" ] ; then
   echo $nameserver > ~/.mydigns.tmp
   break
  fi
  if [ "$nameserver" == "$old" ] ; then
   trodden="true"
  fi
 done
 
 mv -f ~/.mydigns.tmp ~/.mydigns

} #rotate

function usage {
 echo "mydigns - provides a DNS server name from ~/.mydigns for untarnished dns lookups"
 echo "Usage: mydigns [OPTIONS]"
 echo
 echo "  -a servername    Add servername to the list of servers at ~/.mydigns.all"
 echo "  -r               Rotate a new servername from ~/.mydigns.all into ~/.mydigns"
 echo "  -h               Show this Help information"
}

function sortlist {
 cat ~/.mydigns.all | sort | uniq > ~/.mydigns.all.$$.tmp
 mv -f ~/.mydigns.all.$$.tmp ~/.mydigns.all
}

while getopts ":a:rh" options; do
 case $options in
  a ) echo $OPTARG >> ~/.mydigns.all ;;
  r ) rotate ;;
  h ) usage ;
      exit 0 ;;
  \?) usage;
      exit 1 ;;
  * ) usage;
      exit 1 ;;
 esac
done

sortlist

cat ~/.mydigns
