external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ypbind
author yamt <yamt@NetBSD.org>
Tue, 17 Apr 2012 00:01:34 +0000
branchyamt-pagecache
changeset 280360 e98874280705
parent 199649 7abaf08f3305
child 219290 4061a119e536
child 277758 4e44be457bc3
child 280393 591e5f54cb27
permissions -rw-r--r--
sync with head

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

: ${ypbind_restart_cmd:=service_command ypbind restart}
: ${ypbind_stop_cmd:=service_condcommand ypbind stop}
ypbind_dir="$state_dir/ypbind"

best_domain()
{
	local i=

	for i in $interfaces; do
		if [ -e "$ypbind_dir/$i" ]; then
			cat "$ypbind_dir/$i"
		fi
	done
	return 1
}

make_yp_binding()
{
	[ -d "$ypbind_dir" ] || mkdir -p "$ypbind_dir"
	echo "$new_nis_domain" >"$ypbind_dir/$ifname"
	local nd="$(best_domain)"

	local cf=/var/yp/binding/"$new_nis_domain".ypservers
	if [ -n "$new_nis_servers" ]; then
		local ncf="$cf.$ifname" x=
		rm -f "$ncf"
		for x in $new_nis_servers; do
			echo "$x" >>"$ncf"
		done
		change_file "$cf" "$ncf"
	else
		# Because this is not an if .. fi then we can use $? below
		[ -e "$cf" ] && rm "$cf"
	fi

	if [ $? = 0 -o "$nd" != "$(domainname)" ]; then
		domainname "$nd"
		if [ -n "$ypbind_restart_cmd" ]; then
			eval $ypbind_restart_cmd
		fi
	fi
}

restore_yp_binding()
{
	rm -f "$ypbind_dir/$ifname"
	local nd="$(best_domain)"
	# We need to stop ypbind if there is no best domain
	# otherwise it will just stall as we cannot set domainname
	# to blank :/
	if [ -z "$nd" ]; then
		if [ -n "$ypbind_stop_cmd" ]; then
			eval $ypbind_stop_cmd
		fi
	elif [ "$nd" != "$(domainname)" ]; then
		domainname "$nd"
		if [ -n "$ypbind_restart_cmd" ]; then
			eval $ypbind_restart_cmd
		fi
	fi
}

if [ "$reason" = PREINIT ]; then
	rm -f "$ypbind_dir/$ifname"
elif $if_up || $if_down; then
	if [ -n "$new_nis_domain" ]; then
		if valid_domainname "$new_nis_domain"; then
			make_yp_binding
		else
			syslog err "Invalid NIS domain name: $new_nis_domain"
		fi
	elif [ -n "$old_nis_domain" ]; then
		restore_yp_binding
	fi
fi