diff options
Diffstat (limited to 'package/base-files/files/etc/init.d/urandom_seed')
-rwxr-xr-x | package/base-files/files/etc/init.d/urandom_seed | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/package/base-files/files/etc/init.d/urandom_seed b/package/base-files/files/etc/init.d/urandom_seed new file mode 100755 index 0000000000..cb2eb444fc --- /dev/null +++ b/package/base-files/files/etc/init.d/urandom_seed @@ -0,0 +1,29 @@ +#!/bin/sh /etc/rc.common + +START=99 + +EXTRA_COMMANDS="save" + +_log() { + logger -t urandom_seed "$1" +} + +_save() { + touch $1.tmp || { _log "touch $1 failed"; return; } + chown root:root $1.tmp || { _log "chown $1 failed"; return; } + chmod 600 $1.tmp || { _log "chmod $1 failed"; return; } + getrandom 512 > $1.tmp || { _log "getrandom failed"; return; } + mv $1.tmp $1 || { _log "mv $1 failed"; return; } +} + +save() { + SEED="$(uci -q get system.@system[0].urandom_seed)" + [ "${SEED:0:1}" == "/" ] && _save "$SEED" && _log "Seed saved ($SEED)" + + SEED=/etc/urandom.seed + [ ! -f $SEED ] && _save "$SEED" && _log "Seed saved ($SEED)" +} + +boot() { + save +} |