# Sample dhcpcd hook for ypbind
# This script is only suitable for the Linux version.

ypbind_pid()
{
	[ -s /var/run/ypbind.pid ] && cat /var/run/ypbind.pid
}

make_yp_conf()
{
	[ -z "${new_nis_domain}" -a -z "${new_nis_servers}" ] && return 0
	local cf=/etc/yp.conf."${interface}" prefix= x= pid=
	rm -f "${cf}"
	echo "${signature}" > "${cf}"
	if [ -n "${new_nis_domain}" ]; then
		domainname "${new_nis_domain}"
		if [ -n "${new_nis_servers}" ]; then
			prefix="domain ${new_nis_domain} server "
		else
			echo "domain ${new_nis_domain} broadcast" >> "${cf}"
		fi
	else
		prefix="ypserver "
	fi
	for x in ${new_nis_servers}; do
		echo "${prefix}${x}" >> "${cf}"
	done
	save_conf /etc/yp.conf
	mv -f "${cf}" /etc/yp.conf
	pid="$(ypbind_pid)"
	if [ -n "${pid}" ]; then
		kill -HUP "${pid}"
	fi
}

restore_yp_conf()
{
	[ -n "${old_nis_domain}" ] && domainname ""
	restore_conf /etc/yp.conf || return 0
	local pid="$(ypbind_pid)"
	if [ -n "${pid}" ]; then
		kill -HUP "${pid}"
	fi
}

case "${reason}" in
BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT)	make_yp_conf;;
EXPIRE|FAIL|IPV4LL|RELEASE|STOP)		restore_yp_conf;;
esac
