rndctl revision 1.2
1#!/bin/sh
2#
3# $NetBSD: rndctl,v 1.2 2009/02/02 09:24:47 apb Exp $
4#
5
6# PROVIDE: rndctl
7# BEFORE: disks ike ipsec sshd
8
9$_rc_subr_loaded . /etc/rc.subr
10
11name="rndctl"
12rcvar=$name
13command="/sbin/${name}"
14
15start_cmd="rndctl_startcmd"
16
17rndctl_startcmd()
18{
19	# $rndctl_flags can contain multiple semicolon-separated
20	# segments in which each segment contains optional flags
21	# followed by one or more device or type names.  If none of the
22	# -c/-C/-e/-E flags is specified, then "-c -e" is used.  If
23	# neither of the -d/-t flags is specified, then "-d" is used.
24	#
25	# For example, given
26	#	rndctl_flags="wd0 wd1; -t tty; -c -t net"
27	# we will perform the following commands:
28	#	rndctl -c -e -d wd0
29	#	rndctl -c -e -d wd1
30	#	rndctl -c -e -t tty
31	#	rndctl -c -t net
32
33	local args arg flags
34
35	# Split $rndctl_flags on semicolons
36	oIFS="$IFS"
37	IFS=';'
38	set -- $rndctl_flags
39	IFS="$oIFS"
40	# The outer "for args" loop cycles once per semicolon-separated
41	# segment; the inner "for arg" loop cycles once per word in a
42	# segment.
43	for args in "$@"; do
44		#echo >&2 "${name} DEBUG: Parsing segment: $args";
45		flags=''
46		for arg in ${args}; do
47			case "${arg}" in
48				-*)
49					flags="${flags} ${arg}"
50					;;
51				*)
52					# We have a device or type name.
53					# If none of -c/-C/-e/-E flags was
54					# specified, add "-c -e".  If neither
55					# of -d/-t was specified, add "-d".
56					# Then perform the command with the
57					# specified device or type name.
58					#
59					# Note that -d/-t flag must be last.
60					#
61					case "${flags}" in
62					*[cCeE]*) ;;
63					*)	flags="-c -e ${flags}" ;;
64					esac
65					case "${flags}" in
66					*[dt]*) ;;
67					*)	flags="${flags} -d" ;;
68					esac
69					#echo >&2 "${name} DEBUG: running:" \
70					#    "$command $flags $arg"
71					$command ${flags} ${arg}
72					;;
73			esac
74		done
75	done
76}
77
78load_rc_config $name
79run_rc_command "$1"
80