random_seed revision 1.1
11.1Stls#!/bin/sh 21.1Stls# 31.1Stls# $NetBSD: random_seed,v 1.1 2011/11/23 10:47:48 tls Exp $ 41.1Stls# 51.1Stls 61.1Stls# PROVIDE: random_seed 71.1Stls# REQUIRE: mountcritlocal 81.1Stls# BEFORE: securelevel 91.1Stls# KEYWORD: shutdown 101.1Stls 111.1Stls$_rc_subr_loaded . /etc/rc.subr 121.1Stls 131.1Stlsname="random_seed" 141.1Stlsrcvar=$name 151.1Stlsstart_cmd="random_load" 161.1Stlsstop_cmd="random_save" 171.1Stls 181.1Stlsrandom_file=${random_file:-/var/db/entropy-file} 191.1Stls 201.1Stlsfs_safe() 211.1Stls{ 221.1Stls # 231.1Stls # Enforce that the file's on a local filesystem. 241.1Stls # Include only the types we can actually write. 251.1Stls # 261.1Stls fstype=$(df -G $1 | awk '$2 == "fstype" {print $1}') 271.1Stls case $fstype in 281.1Stls ffs) 291.1Stls return 0 301.1Stls ;; 311.1Stls lfs) 321.1Stls return 0 331.1Stls ;; 341.1Stls ext2fs) 351.1Stls return 0; 361.1Stls ;; 371.1Stls msdosfs) 381.1Stls return 0; 391.1Stls ;; 401.1Stls v7fs) 411.1Stls return 0; 421.1Stls ;; 431.1Stls esac 441.1Stls return 1 451.1Stls} 461.1Stls 471.1Stlsrandom_load() 481.1Stls{ 491.1Stls if [ -f $random_file ]; then 501.1Stls 511.1Stls if ! fs_safe $(dirname ${random_file}); then 521.1Stls return 1 531.1Stls fi 541.1Stls 551.1Stls eval $(stat -s ${random_file}) 561.1Stls 571.1Stls # The file must be owned by root, 581.1Stls if [ "$st_uid" != "0" ]; then 591.1Stls return 1 601.1Stls fi 611.1Stls # and root read/write only. 621.1Stls if [ "$(echo $st_mode | tail -c4)" != "600" ]; then 631.1Stls return 1 641.1Stls fi 651.1Stls 661.1Stls if rndctl -L ${random_file}; then 671.1Stls echo "Loaded entropy from disk." 681.1Stls fi 691.1Stls 701.1Stls fi 711.1Stls} 721.1Stls 731.1Stlsrandom_save() 741.1Stls{ 751.1Stls oum=$(umask) 761.1Stls umask 077 771.1Stls 781.1Stls rm -Pf ${random_file} 791.1Stls 801.1Stls if ! fs_safe $(dirname ${random_file}); then 811.1Stls return 1 821.1Stls fi 831.1Stls 841.1Stls if rndctl -S ${random_file}; then 851.1Stls echo "Saved entropy to disk." 861.1Stls fi 871.1Stls} 881.1Stls 891.1Stls 901.1Stlsload_rc_config $name 911.1Stlsrun_rc_command "$1" 92