1 1.1 tls #!/bin/sh 2 1.1 tls # 3 1.2 hans # $NetBSD: random_seed,v 1.2 2012/07/08 14:25:49 hans Exp $ 4 1.1 tls # 5 1.1 tls 6 1.1 tls # PROVIDE: random_seed 7 1.1 tls # REQUIRE: mountcritlocal 8 1.1 tls # BEFORE: securelevel 9 1.1 tls # KEYWORD: shutdown 10 1.1 tls 11 1.1 tls $_rc_subr_loaded . /etc/rc.subr 12 1.1 tls 13 1.1 tls name="random_seed" 14 1.1 tls rcvar=$name 15 1.1 tls start_cmd="random_load" 16 1.1 tls stop_cmd="random_save" 17 1.1 tls 18 1.1 tls random_file=${random_file:-/var/db/entropy-file} 19 1.1 tls 20 1.1 tls fs_safe() 21 1.1 tls { 22 1.1 tls # 23 1.1 tls # Enforce that the file's on a local filesystem. 24 1.1 tls # Include only the types we can actually write. 25 1.1 tls # 26 1.1 tls fstype=$(df -G $1 | awk '$2 == "fstype" {print $1}') 27 1.1 tls case $fstype in 28 1.1 tls ffs) 29 1.1 tls return 0 30 1.1 tls ;; 31 1.1 tls lfs) 32 1.1 tls return 0 33 1.1 tls ;; 34 1.1 tls ext2fs) 35 1.1 tls return 0; 36 1.1 tls ;; 37 1.2 hans msdos) 38 1.1 tls return 0; 39 1.1 tls ;; 40 1.1 tls v7fs) 41 1.1 tls return 0; 42 1.1 tls ;; 43 1.1 tls esac 44 1.1 tls return 1 45 1.1 tls } 46 1.1 tls 47 1.1 tls random_load() 48 1.1 tls { 49 1.1 tls if [ -f $random_file ]; then 50 1.1 tls 51 1.1 tls if ! fs_safe $(dirname ${random_file}); then 52 1.1 tls return 1 53 1.1 tls fi 54 1.1 tls 55 1.1 tls eval $(stat -s ${random_file}) 56 1.1 tls 57 1.1 tls # The file must be owned by root, 58 1.1 tls if [ "$st_uid" != "0" ]; then 59 1.1 tls return 1 60 1.1 tls fi 61 1.1 tls # and root read/write only. 62 1.1 tls if [ "$(echo $st_mode | tail -c4)" != "600" ]; then 63 1.1 tls return 1 64 1.1 tls fi 65 1.1 tls 66 1.1 tls if rndctl -L ${random_file}; then 67 1.1 tls echo "Loaded entropy from disk." 68 1.1 tls fi 69 1.1 tls 70 1.1 tls fi 71 1.1 tls } 72 1.1 tls 73 1.1 tls random_save() 74 1.1 tls { 75 1.1 tls oum=$(umask) 76 1.1 tls umask 077 77 1.1 tls 78 1.1 tls rm -Pf ${random_file} 79 1.1 tls 80 1.1 tls if ! fs_safe $(dirname ${random_file}); then 81 1.1 tls return 1 82 1.1 tls fi 83 1.1 tls 84 1.1 tls if rndctl -S ${random_file}; then 85 1.1 tls echo "Saved entropy to disk." 86 1.1 tls fi 87 1.1 tls } 88 1.1 tls 89 1.1 tls 90 1.1 tls load_rc_config $name 91 1.1 tls run_rc_command "$1" 92