11.1Slukem#!/bin/sh
21.1Slukem#
31.11Sskrll# $NetBSD: rtadvd,v 1.11 2020/07/04 06:24:53 skrll Exp $
41.1Slukem#
51.1Slukem
61.1Slukem# PROVIDE: rtadvd
71.2Slukem# REQUIRE: DAEMON
81.5Sthorpej# BEFORE:  LOGIN
91.1Slukem
101.6Smycroft$_rc_subr_loaded . /etc/rc.subr
111.1Slukem
121.8Sroyname=rtadvd
131.4Slukemrcvar=$name
141.8Sroycommand="/usr/sbin/$name"
151.7Sroypidfile="/var/run/$name.pid"
161.8Sroyextra_commands=reload
171.8Sroystart_precmd=rtadvd_prestart
181.8Sroyreload_precmd=rtadvd_prereload
191.1Slukem
201.8Sroyrtadvd_prereload()
211.1Slukem{
221.8Sroy	local chdir="$(getent passwd _rtadvd | cut -d: -f6)"
231.8Sroy	local conf=/etc/rtadvd.conf myflags o confdir
241.9Skre	local cflag=false
251.11Sskrll
261.9Skre	[ -z "${chdir}" ] || [ "/${chdir}" = // ] && return 0
271.8Sroy
281.9Skre	if [ -n "${flags}" ]; then
291.9Skre		myflags=${flags}
301.8Sroy	else
311.8Sroy		eval myflags=\$${name}_flags
321.8Sroy	fi
331.8Sroy	set -- ${myflags}
341.8Sroy	while getopts c:dDfM:Rs o; do
351.9Skre		# ignore other args, they are processed by rtadvd itself
361.9Skre		case "${o}" in
371.9Skre		c)	conf="${OPTARG}"
381.9Skre			case "${conf}" in
391.9Skre			/*)	;;
401.9Skre			*)	echo "${name}: config file (${conf}) must be" \
411.9Skre					"full pathname"
421.9Skre				return 1
431.9Skre				;;
441.9Skre			esac
451.9Skre			cflag=true;;
461.8Sroy		esac
471.8Sroy	done
481.8Sroy
491.9Skre	${cflag} || test -f "${conf}" && {
501.9Skre		confdir=$(dirname "${conf}")
511.9Skre		echo "${name}: copying ${conf} to ${chdir}${conf}"
521.9Skre		mkdir -p "${chdir}${confdir}"
531.9Skre		cp "${conf}" "${chdir}${conf}" || return 1
541.9Skre	}
551.9Skre
561.9Skre	# Make sure /var/run exists in the chroot
571.9Skre	mkdir -p "${chdir}/var/run"
581.9Skre
591.10Skre	# Provide a link to the chrooted dump file
601.9Skre	ln -snf "${chdir}/var/run/${name}.dump" /var/run
611.9Skre
621.9Skre	# Note: actual chroot is done by rtadvd itself
631.9Skre
641.9Skre	return 0
651.8Sroy}
661.8Sroy
671.8Sroyrtadvd_prestart()
681.8Sroy{
691.8Sroy	if [ "$ip6mode" != router ]; then
701.1Slukem		warn \
711.1Slukem	"${name} cannot be used on IPv6 host, only on an IPv6 router."
721.1Slukem		return 1
731.1Slukem	fi
741.8Sroy
751.8Sroy	rtadvd_prereload
761.1Slukem}
771.1Slukem
781.3Slukemload_rc_config $name
791.1Slukemrun_rc_command "$1"
80