diff options
Diffstat (limited to 'init.d/urandom.in')
-rw-r--r-- | init.d/urandom.in | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/init.d/urandom.in b/init.d/urandom.in new file mode 100644 index 00000000..6e901006 --- /dev/null +++ b/init.d/urandom.in @@ -0,0 +1,46 @@ +#!/sbin/runscript +# Copyright 2007-2008 Roy Marples <roy@marples.name> +# All rights reserved. Released under the 2-clause BSD license. + +urandom_seed=${urandom_seed:-${URANDOM_SEED:-/var/run/random-seed}} + +description="Initializes the random number generator." + +depend() +{ + need localmount + keyword nojail noprefix +} + +save_seed() +{ + local psz=1 + + if [ -e /proc/sys/kernel/random/poolsize ]; then + psz=$(($(cat /proc/sys/kernel/random/poolsize) / 4096)) + fi + + ( # sub shell to prevent umask pollution + umask 077 + dd if=/dev/urandom of="${urandom_seed}" count=${psz} 2>/dev/null + ) +} + +start() +{ + [ -c /dev/urandom ] || return + if [ -f "${urandom_seed}" ]; then + ebegin "Initializing random number generator" + cat "${urandom_seed}" > /dev/urandom + eend $? "Error initializing random number generator" + fi + rm -f "${urandom_seed}" && save_seed + return 0 +} + +stop() +{ + ebegin "Saving random seed" + save_seed + eend $? "Failed to save random seed" +} |