# 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."$ifname" prefix= x= pid=
	rm -f "$cf"
	echo "$signature" > "$cf"
	if [ -n "$new_nis_domain" ]; then
		if ! valid_domainname "$new_nis_domain"; then
			syslog err "Invalid NIS domain name: $new_nis_domain"
			rm -f "$cf"
			return 1
		fi
		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
	cat "$cf" > /etc/yp.conf
	rm -f "$cf"
	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
}

if $if_up; then
	make_yp_conf
elif $if_down; then
	restore_yp_conf
fi
