# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
# shellcheck shell=sh disable=SC1008

_config_vars="$_config_vars dns_servers dns_domain dns_search"
_config_vars="$_config_vars dns_sortlist dns_options"
_config_vars="$_config_vars ntp_servers nis_servers nis_domain"

system_depend()
{
	after interface
	before dhcp
}

_system_dns()
{
	local servers= domain= search= sortlist= options= x= imetric=

	eval servers=\$dns_servers_${IFVAR}
	[ -z "${servers}" ] && servers=${dns_servers}

	eval domain=\$dns_domain_${IFVAR}
	[ -z "${domain}" ] && domain=${dns_domain}

	eval search=\$dns_search_${IFVAR}
	[ -z "${search}" ] && search=${dns_search}

	eval sortlist=\$dns_sortlist_${IFVAR}
	[ -z "${sortlist}" ] && sortlist=${dns_sortlist}

	eval options=\$dns_options_${IFVAR}
	[ -z "${options}" ] && options=${dns_options}

	[ -z "${servers}" -a -z "${domain}" -a -z "${search}" \
	-a -z "${sortlist}" -a -z "${options}" ] && return 0

	local buffer="# Generated by netifrc for interface ${IFACE}\n"
	[ -n "${domain}" ] && buffer="${buffer}domain ${domain}\n"
	[ -n "${search}" ] && buffer="${buffer}search ${search}\n"

	for x in ${servers}; do
		buffer="${buffer}nameserver ${x}\n"
	done

	[ -n "${sortlist}" ] && buffer="${buffer}sortlist ${sortlist}\n"
	[ -n "${options}" ] && buffer="${buffer}options ${options}\n"

	# Support resolvconf if we have it.
	if command -v resolvconf >/dev/null; then
		x="-a ${IFACE}"
		eval imetric=\${metric_${IFVAR}}
		if [ -n "${imetric}" ]; then
			x="${x} -m ${imetric}"
		fi
		printf "${buffer}" | resolvconf ${x}
	else
		printf "${buffer}" > /etc/resolv.conf
		chmod 644 /etc/resolv.conf
	fi
}

_system_ntp()
{
	local servers= buffer= x=

	eval servers=\$ntp_servers_${IFVAR}
	[ -z "${servers}" ] && servers=${ntp_servers}
	[ -z "${servers}" ] && return 0

	buffer="# Generated by netifrc for interface ${IFACE}\n"
	buffer="${buffer}restrict default noquery notrust nomodify\n"
	buffer="${buffer}restrict 127.0.0.1\n"

	for x in ${servers}; do
		buffer="${buffer}restrict ${x} nomodify notrap noquery\n"
		buffer="${buffer}server ${x}\n"
	done

	printf "${buffer}" > /etc/ntp.conf
	chmod 644 /etc/ntp.conf
}

_system_nis()
{
	local servers= domain= x= buffer=

	eval servers=\$nis_servers_${IFVAR}
	[ -z "${servers}" ] && servers=${nis_servers}

	eval domain=\$nis_domain_${IFVAR}
	[ -z "${domain}" ] && domain=${nis_domain}

	[ -z "${servers}" -a -z "${domain}" ] && return 0

	buffer="# Generated by netifrc for interface ${iface}\n"

	if [ -n "${domain}" ]; then
		hostname -y "${domain}"
		if [ -n "${servers}" ]; then
			for x in ${servers}; do
				buffer="${buffer}domain ${domain} server ${x}\n"
			done
		else
			buffer="${buffer}domain ${domain} broadcast\n"
		fi
	else
		for x in ${servers}; do
			buffer="${buffer}ypserver ${x}\n"
		done
	fi

	printf "${buffer}" > /etc/yp.conf
	chmod 644 /etc/yp.conf
}

system_pre_start()
{
	_system_dns
	_system_ntp
	_system_nis

	return 0
}
