base-files: seed /dev/urandom
[lede.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 }