base-files: seed /dev/urandom
[openwrt/openwrt.git] / package / base-files / files / etc / init.d / urandom_seed
1 #!/bin/sh /etc/rc.common
2
3 START=99
4
5 EXTRA_COMMANDS="save"
6
7 _log() {
8 logger -t urandom_seed "$1"
9 }
10
11 _save() {
12 touch $1.tmp || { _log "touch $1 failed"; return; }
13 chown root:root $1.tmp || { _log "chown $1 failed"; return; }
14 chmod 600 $1.tmp || { _log "chmod $1 failed"; return; }
15 getrandom 512 > $1.tmp || { _log "getrandom failed"; return; }
16 mv $1.tmp $1 || { _log "mv $1 failed"; return; }
17 }
18
19 save() {
20 SEED="$(uci -q get system.@system[0].urandom_seed)"
21 [ "${SEED:0:1}" == "/" ] && _save "$SEED" && _log "Seed saved ($SEED)"
22
23 SEED=/etc/urandom.seed
24 [ ! -f $SEED ] && _save "$SEED" && _log "Seed saved ($SEED)"
25 }
26
27 boot() {
28 save
29 }