initrandom revision 98184
198184Sgordon#!/bin/sh
298184Sgordon#
398184Sgordon# $FreeBSD: head/etc/rc.d/initrandom 98184 2002-06-13 22:14:37Z gordon $
498184Sgordon#
598184Sgordon
698184Sgordon# PROVIDE: initrandom
798184Sgordon# REQUIRE: initdiskless
898184Sgordon# BEFORE: disks
998184Sgordon# KEYWORD: FreeBSD
1098184Sgordon
1198184Sgordon. /etc/rc.subr
1298184Sgordon
1398184Sgordonname="initrandom"
1498184Sgordonstart_cmd="initrandom_start"
1598184Sgordonstop_cmd=":"
1698184Sgordon
1798184Sgordonfeed_dev_random()
1898184Sgordon{
1998184Sgordon	if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
2098184Sgordon		cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
2198184Sgordon	fi
2298184Sgordon}
2398184Sgordon
2498184Sgordoninitrandom_start()
2598184Sgordon{
2698184Sgordon	echo -n 'Entropy harvesting:'
2798184Sgordon
2898184Sgordon	if checkyesno harvest_interrupt; then
2998184Sgordon		if [ -w /dev/random ]; then
3098184Sgordon			${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null
3198184Sgordon			echo -n ' interrupts'
3298184Sgordon		fi
3398184Sgordon	fi
3498184Sgordon
3598184Sgordon	if checkyesno harvest_ethernet; then
3698184Sgordon		if [ -w /dev/random ]; then
3798184Sgordon			${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null
3898184Sgordon			echo -n ' ethernet'
3998184Sgordon		fi
4098184Sgordon	fi
4198184Sgordon
4298184Sgordon	if checkyesno harvest_p_to_p; then
4398184Sgordon		if [ -w /dev/random ]; then
4498184Sgordon		${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null
4598184Sgordon			echo -n ' point_to_point'
4698184Sgordon		fi
4798184Sgordon	fi
4898184Sgordon
4998184Sgordon	echo '.'
5098184Sgordon
5198184Sgordon	# First pass at reseeding /dev/random.
5298184Sgordon	#
5398184Sgordon	case ${entropy_file} in
5498184Sgordon	[Nn][Oo] | '')
5598184Sgordon		;;
5698184Sgordon	*)
5798184Sgordon		if [ -w /dev/random ]; then
5898184Sgordon			feed_dev_random "${entropy_file}"
5998184Sgordon		fi
6098184Sgordon		;;
6198184Sgordon	esac
6298184Sgordon
6398184Sgordon	# XXX temporary until we can get the entropy
6498184Sgordon	# harvesting rate up
6598184Sgordon	# Entropy below is not great,
6698184Sgordon	# but better than nothing.
6798184Sgordon	( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) \
6898184Sgordon	    | dd of=/dev/random bs=8k 2>/dev/null
6998184Sgordon	cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
7098184Sgordon}
7198184Sgordon
7298184Sgordonload_rc_config random
7398184Sgordonrun_rc_command "$1"
74