#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/initrandom,v 1.1 2002/06/13 22:14:36 gordon Exp $
#

# PROVIDE: initrandom
# REQUIRE: initdiskless
# BEFORE: disks

. /etc/rc.subr

name="initrandom"
start_cmd="initrandom_start"
stop_cmd=":"

feed_dev_random()
{
	if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
		${SYSCTL_W} kern.seedenable=1 >/dev/null
		cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
		${SYSCTL_W} kern.seedenable=0 >/dev/null
	fi
}

initrandom_start()
{
	# First pass at reseeding /dev/random.
	#
	case ${entropy_file} in
	[Nn][Oo] | '')
		;;
	*)
		if [ -w /dev/random ]; then
			feed_dev_random "${entropy_file}"
		fi
		;;
	esac

	# Mix in more junk.  At the very least this will make seeding a
	# bit more machine specific.  The 'sysctl -a' will also catch the
	# TSC, 8254, and a few other things that tend to be somewhat more
	# random (even from a CD boot) so it isn't all that bad.
	#
	echo -n 'Initializing random seed: '
	${SYSCTL_W} kern.seedenable=1 >/dev/null
	( ps -fauxww; ${SYSCTL} -a; date; df -ib; dmesg; ps -fauxww; ) \
	    2>&1 | dd of=/dev/random bs=8k 2>/dev/null
	cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
	${SYSCTL_W} kern.seedenable=0 >/dev/null
	echo 'done. '
}

load_rc_config random
run_rc_command "$1"
