Module Name:    src
Committed By:   apb
Date:           Fri Dec 14 18:42:25 UTC 2012

Modified Files:
        src/etc/rc.d: random_seed

Log Message:
Avoid using programs from /usr/bin.  This should fix PR 47326.

- no need for "dirname", because "df -G" can take a file name directly.
- replace use of "awk" with a shell while read loop.
- replace use of "stat -s" with "ls -ldn".
- no need for "tail" now that the use of "stat" has changed.

While here, also add some shell quotes and improve the grammar in a comment.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/etc/rc.d/random_seed

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/rc.d/random_seed
diff -u src/etc/rc.d/random_seed:1.3 src/etc/rc.d/random_seed:1.4
--- src/etc/rc.d/random_seed:1.3	Sat Nov 10 15:10:22 2012
+++ src/etc/rc.d/random_seed	Fri Dec 14 18:42:25 2012
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: random_seed,v 1.3 2012/11/10 15:10:22 apb Exp $
+# $NetBSD: random_seed,v 1.4 2012/12/14 18:42:25 apb Exp $
 #
 
 # PROVIDE: random_seed
@@ -13,7 +13,7 @@
 # this script won't work if run after the securelevel is changed.
 #
 # The "BEFORE: bootconf" is intended to cause this to
-# be the first script to runs after mountcritlocal.
+# be the first script that runs after mountcritlocal.
 
 $_rc_subr_loaded . /etc/rc.subr
 
@@ -30,7 +30,11 @@ fs_safe()
 	# Enforce that the file's on a local filesystem.
 	# Include only the types we can actually write.
 	#
-	fstype=$(df -G $1 | awk '$2 == "fstype" {print $1}')
+	fstype=$(df -G "$1" |
+		while read line ; do
+		    set -- $line
+		    if [ "$2" = "fstype" ]; then echo "$1" ; break ; fi
+		done )
 	case $fstype in
 	    ffs)
 		return 0
@@ -55,22 +59,24 @@ random_load()
 {
 	if [ -f $random_file ]; then
 
-		if ! fs_safe $(dirname ${random_file}); then
+		if ! fs_safe "${random_file}"; then
 			return 1
 		fi
 
-		eval $(stat -s ${random_file})
+		set -- $(ls -ldn "${random_file}")
+		st_mode="$1" # should be "-rw-------"
+		st_uid="$3"  # should be "0" for root
 
 		# The file must be owned by root,
 		if [ "$st_uid" != "0" ]; then
 			return 1
 		fi
 		# and root read/write only.
-		if [ "$(echo $st_mode | tail -c4)" != "600" ]; then
+		if [ "$st_mode" != "-rw-------" ]; then
 			return 1
 		fi
 
-		if rndctl -L ${random_file}; then
+		if rndctl -L "${random_file}"; then
 			echo "Loaded entropy from disk."
 		fi
 		
@@ -82,13 +88,13 @@ random_save()
 	oum=$(umask)
 	umask 077
 
-	rm -Pf ${random_file}
+	rm -Pf "${random_file}"
 
-	if ! fs_safe $(dirname ${random_file}); then
+	if ! fs_safe "${random_file}"; then
 		return 1
 	fi
 
-	if rndctl -S ${random_file}; then
+	if rndctl -S "${random_file}"; then
 		echo "Saved entropy to disk."
 	fi
 }

Reply via email to