#!/bin/sh
#
# Script for adding or removing entries in /etc/resolv.conf

RESOLV_CONF="/etc/resolv.conf"

usage()
{
	cat <<EOF
Usage: resolv_manip OPTION [IFACE DNS-SERVER]
Add or delete a nameserver entry from $RESOLV_CONF.

Option: use one of
   -p  prepend DNS server for an interface (IFACE and DNS-SERVER
       are mandatory), an already existing entry will be replaced
   -a  append DNS server for an interface (IFACE and DNS-SERVER
       are mandatory), an already existing entry will be replaced
   -d  remove a DNS server specified by  interface or IP address
       (IFACE or DNS_SERVER is required)
   -h  output this text

Argunents:
   IFACE       network interface of DNS server to add or delete
   DNS-SERVER  IP address of DNS server to add (or delete)
EOF
}

case "$1" in
	-p)
		[ $# -lt 3 ] && echo "Missing argument(s)" && usage && exit 1
		TMPFILE=$(mktemp)
		echo "nameserver $3 # $2" > $TMPFILE
		p=$(echo $3 | sed 's/\./\\\./g')
        grep -vEs "(^\s*nameserver\s+$p(\s|#))|(#\s*$2\s*\$)" $RESOLV_CONF >> $TMPFILE
		;;

	-a)
		[ $# -lt 3 ] && echo "Missing argument(s)" && usage && exit 1
		TMPFILE=$(mktemp)
		p=$(echo $3 | sed 's/\./\\\./g')
        grep -vEs "(^\s*nameserver\s+$p(\s|#))|(#\s*$2\s*\$)" $RESOLV_CONF > $TMPFILE
		echo "nameserver $3 # $2" >> $TMPFILE
		;;

	-d)
		[ $# -lt 2 ] && echo "Missing argument(s)" && usage && exit 1
		TMPFILE=$(mktemp)
		p=$(echo $2 | sed 's/\./\\\./g')
        grep -vEs "(#\s*$2\s*\$)|(^\s*nameserver\s+$p(\s|#))" $RESOLV_CONF > $TMPFILE
		;;
	-h)
		usage
		exit 0
		;;
	*)
		([ $# -eq 0 ] && echo "Missing option") || echo "Invalid option '$1'"
		usage
		exit 1
		;;
esac

cat $TMPFILE > $RESOLV_CONF
rm -f $TMPFILE
