Merge branch 'vendor/TCSH'
[dragonfly.git] / etc / rc.d / initrandom
1 #!/bin/sh
2 #
3 # $FreeBSD: src/etc/rc.d/initrandom,v 1.1 2002/06/13 22:14:36 gordon Exp $
4 #
5
6 # PROVIDE: initrandom
7 # REQUIRE: initdiskless
8 # BEFORE: disks
9
10 . /etc/rc.subr
11
12 name="initrandom"
13 start_cmd="initrandom_start"
14 stop_cmd=":"
15
16 feed_dev_random()
17 {
18         if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
19                 ${SYSCTL_W} kern.seedenable=1 >/dev/null
20                 cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
21                 ${SYSCTL_W} kern.seedenable=0 >/dev/null
22         fi
23 }
24
25 initrandom_start()
26 {
27         # First pass at reseeding /dev/random.
28         #
29         case ${entropy_file} in
30         [Nn][Oo] | '')
31                 ;;
32         *)
33                 if [ -w /dev/random ]; then
34                         feed_dev_random "${entropy_file}"
35                 fi
36                 ;;
37         esac
38
39         # Mix in more junk.  At the very least this will make seeding a
40         # bit more machine specific.  The 'sysctl -a' will also catch the
41         # TSC, 8254, and a few other things that tend to be somewhat more
42         # random (even from a CD boot) so it isn't all that bad.
43         #
44         echo -n 'Initializing random seed: '
45         ${SYSCTL_W} kern.seedenable=1 >/dev/null
46         ( ps -fauxww; ${SYSCTL} -a; date; df -ib; dmesg; ps -fauxww; ) \
47             2>&1 | dd of=/dev/random bs=8k 2>/dev/null
48         cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
49         ${SYSCTL_W} kern.seedenable=0 >/dev/null
50         echo 'done. '
51 }
52
53 load_rc_config random
54 run_rc_command "$1"