#!/bin/sh
#
# $NetBSD: rndctl,v 1.3 2009/04/21 16:08:57 joerg Exp $
#

# PROVIDE: rndctl
# BEFORE:  DISKS ike ipsec sshd
# REQUIRE: wdogctl

$_rc_subr_loaded . /etc/rc.subr

name="rndctl"
rcvar=$name
command="/sbin/${name}"

start_cmd="rndctl_startcmd"

rndctl_startcmd()
{
       # $rndctl_flags can contain multiple semicolon-separated
       # segments in which each segment contains optional flags
       # followed by one or more device or type names.  If none of the
       # -c/-C/-e/-E flags is specified, then "-c -e" is used.  If
       # neither of the -d/-t flags is specified, then "-d" is used.
       #
       # For example, given
       #       rndctl_flags="wd0 wd1; -t tty; -c -t net"
       # we will perform the following commands:
       #       rndctl -c -e -d wd0
       #       rndctl -c -e -d wd1
       #       rndctl -c -e -t tty
       #       rndctl -c -t net

       local args arg flags

       # Split $rndctl_flags on semicolons
       oIFS="$IFS"
       IFS=';'
       set -- $rndctl_flags
       IFS="$oIFS"
       # The outer "for args" loop cycles once per semicolon-separated
       # segment; the inner "for arg" loop cycles once per word in a
       # segment.
       for args in "$@"; do
               #echo >&2 "${name} DEBUG: Parsing segment: $args";
               flags=''
               for arg in ${args}; do
                       case "${arg}" in
                               -*)
                                       flags="${flags} ${arg}"
                                       ;;
                               *)
                                       # We have a device or type name.
                                       # If none of -c/-C/-e/-E flags was
                                       # specified, add "-c -e".  If neither
                                       # of -d/-t was specified, add "-d".
                                       # Then perform the command with the
                                       # specified device or type name.
                                       #
                                       # Note that -d/-t flag must be last.
                                       #
                                       case "${flags}" in
                                       *[cCeE]*) ;;
                                       *)      flags="-c -e ${flags}" ;;
                                       esac
                                       case "${flags}" in
                                       *[dt]*) ;;
                                       *)      flags="${flags} -d" ;;
                                       esac
                                       #echo >&2 "${name} DEBUG: running:" \
                                       #    "$command $flags $arg"
                                       $command ${flags} ${arg}
                                       ;;
                       esac
               done
       done
}

load_rc_config $name
run_rc_command "$1"