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