Module Name:    src
Committed By:   snj
Date:           Mon Nov 21 07:29:26 UTC 2016

Modified Files:
        src/etc/rc.d [netbsd-7]: rtadvd

Log Message:
Pull up following revision(s) (requested by kre in ticket #1274):
        etc/rc.d/rtadvd: revision 1.9
The config file is not required to exist (unless specified via -c).
(reported by rhia...@falu.nl)  Don't fail to start if it doesn't.
Make sure the directory for the config file exists inside the chroot before
attempting to copy into it ("confdir" was calculated, but never used...)
While here, fix getopts usage (obviously only ever previously tested when
the -c arg was the first option...) and don't use test(1)'s -o operator
(especially not when one of the other args is an unknown string).
If -c is given (and we will chroot), require filename to be full path.
Misc minor style cleanups.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.8.6.1 src/etc/rc.d/rtadvd

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/rc.d/rtadvd
diff -u src/etc/rc.d/rtadvd:1.8 src/etc/rc.d/rtadvd:1.8.6.1
--- src/etc/rc.d/rtadvd:1.8	Tue Jul  9 09:34:58 2013
+++ src/etc/rc.d/rtadvd	Mon Nov 21 07:29:25 2016
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: rtadvd,v 1.8 2013/07/09 09:34:58 roy Exp $
+# $NetBSD: rtadvd,v 1.8.6.1 2016/11/21 07:29:25 snj Exp $
 #
 
 # PROVIDE: rtadvd
@@ -21,28 +21,47 @@ rtadvd_prereload()
 {
 	local chdir="$(getent passwd _rtadvd | cut -d: -f6)"
 	local conf=/etc/rtadvd.conf myflags o confdir
+	local cflag=false
 	
-	[ -z "$chdir" -o "$chdir" = / ] && return 0
+	[ -z "${chdir}" ] || [ "/${chdir}" = // ] && return 0
 
-	if [ -n "$flags" ]; then
-		myflags=$flags
+	if [ -n "${flags}" ]; then
+		myflags=${flags}
 	else
 		eval myflags=\$${name}_flags
 	fi
 	set -- ${myflags}
 	while getopts c:dDfM:Rs o; do
-		case "$1" in
-		-c)	conf="$OPTARG";;
+		# ignore other args, they are processed by rtadvd itself
+		case "${o}" in
+		c)	conf="${OPTARG}"
+			case "${conf}" in
+			/*)	;;
+			*)	echo "${name}: config file (${conf}) must be" \
+					"full pathname"
+				return 1
+				;;
+			esac
+			cflag=true;;
 		esac
-		shift
 	done
-	confdir=$(dirname "$conf")
-	
-	echo "$name: copying $conf to $chdir$conf"
-	cp "$conf" "$chdir$conf"
 
-	# Provide a link to the chrooted dump file
-	ln -snf "$chdir/var/run/$name.dump" /var/run
+	${cflag} || test -f "${conf}" && {
+		confdir=$(dirname "${conf}")
+		echo "${name}: copying ${conf} to ${chdir}${conf}"
+		mkdir -p "${chdir}${confdir}"
+		cp "${conf}" "${chdir}${conf}" || return 1
+	}
+
+	# Make sure /var/run exists in the chroot
+	mkdir -p "${chdir}/var/run"
+
+	# Provide links to the chrooted dump & pid files
+	ln -snf "${chdir}/var/run/${name}.dump" /var/run
+
+	# Note: actual chroot is done by rtadvd itself
+
+	return 0
 }
 
 rtadvd_prestart()

Reply via email to