#!/bin/bash

# Bring up/down named

if [ ! -f /etc/fiad-conf/dns.conf ] ; then
	# self healing
	cp -f /etc/default-conf/dns.conf /etc/fiad-conf/dns.conf
fi

. /etc/fiad-conf/sysconfig/rc.conf
. /etc/fiad-conf/sysconfig/network.conf
. /bin/network-functions
. /etc/fiad-conf/dns.conf

PIDFILE=/var/run/dnsmasq.pid
SERVICE=named
PROCESS_NAME=dnsmasq

DNSMASQ_CONF=/var/run/dnsmasq.conf

putnameserver(){
	delimiter="nameserver"
	string=$1$delimiter
	serverarray=()
	while [[ $string ]]; do
		serverarray+=( "${string%%"$delimiter"*}" )
		string=${string#*"$delimiter"}
	done
	for value in ${serverarray[@]}
		do
		echo "server=$value" >> $DNSMASQ_CONF
	done
}

do_start ()
{
	if ! ServiceCheckRunning1 ; then
		return $?
	fi

	/etc/init.d/softdogd wait

	if [ ! -f /etc/fiad-conf/dns-A.conf ] ; then
		# self healing for update without increased version number / config restore from old version
		echo "$(/bin/addr -i lan0) $HOSTNAME www ftp tftp" > /etc/fiad-conf/dns-A.conf
		echo "127.0.0.1 localhost" >> /etc/hosts
	fi

	if [ "x$DOMAINNAME" = "x" ] ; then
		# self healing for update without increased version number / config restore from old version
		DOMAINNAME="epygi-config.loc"
	fi

	# create config file
	echo "# This file is dynamically created by /etc/init.d/named. Do not modify manually" > $DNSMASQ_CONF

	echo "interface=lan0" >> $DNSMASQ_CONF
	echo "interface=tun0" >> $DNSMASQ_CONF
	echo "interface=tap0" >> $DNSMASQ_CONF

	echo "local-ttl=$DNS_TTL" >> $DNSMASQ_CONF

	if [ "x$DNS_MX" != "x" ] ; then
		echo "# MX Records" >> $DNSMASQ_CONF
		echo "mx-host=$DOMAINNAME,$DNS_MX.$DOMAINNAME,1"  >> $DNSMASQ_CONF
		echo >> $DNSMASQ_CONF
	fi
	
	echo "# A Records" >> $DNSMASQ_CONF
	echo "address=/localhost/127.0.0.1" >> $DNSMASQ_CONF
	(
		# set/reset IFS in a subshell. Otherwise it won't work
		OLDIDS=$IFS
		IFS='
'
		for i in $(/bin/cat /etc/fiad-conf/dns-A.conf) ; do
			IFS=' '
			set $i
			echo "address=/$2.$DOMAINNAME/$1" >> $DNSMASQ_CONF
			if [ "$3" != "" ]; then
				echo "address=/${3:+$3.$DOMAINNAME}/$1" >> $DNSMASQ_CONF
			fi
			if [ "$4" != "" ]; then
				echo "address=/${4:+$4.$DOMAINNAME}/$1" >> $DNSMASQ_CONF
			fi
			if [ "$5" != "" ]; then
				echo "address=/${5:+$5.$DOMAINNAME}/$1" >> $DNSMASQ_CONF
			fi
			if [ "$6" != "" ]; then
				echo "address=/${6:+$6.$DOMAINNAME}/$1" >> $DNSMASQ_CONF
			fi
			if [ "$7" != "" ]; then
				echo "address=/${7:+$7.$DOMAINNAME}/$1" >> $DNSMASQ_CONF
			fi
		done
		
		if [ "$FEATURE_REDUNDANCY" = "1" ] && [ "$START_KEEPALIVED" = "true" ] && [ "$KEEPALIVED_METHOD" = "true" ]; then
			/bin/logger -t dnsmasq "skip record of current hostname resolved on IP address of lan0 interface"
		else
			echo -n "address=/$HOSTNAME.$DOMAINNAME/$(/bin/addr -i lan0)" >> $DNSMASQ_CONF
			echo >> $DNSMASQ_CONF
		fi
		dev=`grep "DEVICE=" /etc/fiad-conf/sysconfig/network-scripts/ifcfg-external`
		
    	if [ "$dev" != "" ]; then 	
			dev=${dev:7}	
			devaddr=$(/bin/addr -i $dev 2>/dev/null ) 
			if [ "$devaddr" != "" ]; then 	
				echo -n "address=/$HOSTNAME.$DOMAINNAME/$devaddr" >> $DNSMASQ_CONF
			    echo >> $DNSMASQ_CONF
			fi		
		fi
		
		echo >> $DNSMASQ_CONF		
	)

	echo "# Forwarders - fixed or given by dynamic protocol like DHClient or PPP" >> $DNSMASQ_CONF

	if ( [ "$START_DHCLIENT" = "true" ] || [ "$START_PPP" = "true" ] ) && [ "$USEPEERDNS" = "true" ] ; then
		if [ -f /var/run/dynforward.conf.ppp ] ; then
		for i in $(/bin/cat /var/run/dynforward.conf.ppp) ; do
			putnameserver $i
		done
		elif [ -f /var/run/dynforward.conf.dhcp ] ; then
			for i in $(/bin/cat /var/run/dynforward.conf.dhcp) ; do
			putnameserver $i
		done
		fi
	else
		for i in $(/bin/cat /etc/fixedforward.conf.mgmt) ; do
			putnameserver $i
		done
		echo >> $DNSMASQ_CONF
	fi
	echo >> $DNSMASQ_CONF
	/bin/$PROCESS_NAME --no-hosts -u root -C $DNSMASQ_CONF --pid-file=$PIDFILE
	ServiceCheckRunning2

	return
}

do_stop ()
{
	/etc/init.d/softdogd wait

	ServiceStop

	return $?
}

do_status ()
{
	ServiceStatus

	return $?
}

case "$1" in
	start)
		do_start
		;;
	stop)
		do_stop
		;;
	status)
		do_status
		;;
	restart)
		do_stop
		do_start
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		exit 1
esac

exit $?
