summaryrefslogtreecommitdiff
path: root/package/base-files/files/etc/init.d/urandom_seed
blob: cb2eb444fce013427f7b662e4ae654c2d4f3f135 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
}