e854b2c
--- trousers-0.3.1.orig/dist/fedora/fedora.initrd.tcsd	2008-03-28 15:07:20.000000000 -0700
e854b2c
+++ trousers-0.3.1/dist/fedora/fedora.initrd.tcsd	2008-03-28 15:18:56.000000000 -0700
e854b2c
@@ -21,33 +21,79 @@ prog="tcsd"
e854b2c
 # Some variables to make the below more readable
e854b2c
 TCSD=/usr/sbin/tcsd
e854b2c
 PID_FILE=/var/run/tcsd.pid
e854b2c
-INSMOD=/sbin/insmod
e854b2c
+MODPROBE=/sbin/modprobe
e854b2c
 LSMOD=/sbin/lsmod
e854b2c
 GREP=/bin/grep
e854b2c
+PWD=/bin/pwd
e854b2c
+MOD_DIR=/lib/modules/$(uname -r)/kernel/drivers/char/tpm
e854b2c
+START_OPT=" start"
e854b2c
 
e854b2c
 load_drivers()
e854b2c
 {
e854b2c
-	for d in `echo /lib/modules/$(uname -r)/kernel/drivers/char/tpm/tpm_*`; do
e854b2c
-		$INSMOD $d
e854b2c
-		if test $? -eq 0; then
e854b2c
-			break;
e854b2c
+	CUR_DIR=`$PWD`
e854b2c
+	cd $MOD_DIR
e854b2c
+
e854b2c
+	# Must load tpm_bios.ko first
e854b2c
+	$MODPROBE tpm_bios >/dev/null 2>&1
e854b2c
+	RETVAL=$?
e854b2c
+	if [ $RETVAL -ne 0 ]; then
e854b2c
+		failure "Load tpm_bios"
e854b2c
+		echo
e854b2c
+		cd $CUR_DIR
e854b2c
+		return $RETVAL
e854b2c
+	fi
e854b2c
+
e854b2c
+	# Must load tpm.ko second
e854b2c
+	$MODPROBE tpm >/dev/null 2>&1
e854b2c
+	RETVAL=$?
e854b2c
+	if [ $RETVAL -ne 0 ]; then
e854b2c
+		failure "Load tpm"
e854b2c
+		echo
e854b2c
+		cd $CUR_DIR
e854b2c
+		return $RETVAL
e854b2c
+	fi
e854b2c
+
e854b2c
+	# Attempt to load remaining tpm_*.ko
e854b2c
+	# But do NOT return error if they fail
e854b2c
+	for d in `echo tpm_*`; do
e854b2c
+		if [ "$d" != "tpm_bios.ko" ]
e854b2c
+		then
e854b2c
+			m=${d%".ko"}
e854b2c
+			$MODPROBE $m >/dev/null 2>&1
e854b2c
 		fi
e854b2c
 	done
e854b2c
+
e854b2c
+	cd $CUR_DIR
e854b2c
+	success "Load tpm"
e854b2c
+	echo
e854b2c
+	return $RETVAL
e854b2c
 }
e854b2c
 
e854b2c
 check_drivers()
e854b2c
 {
e854b2c
-	$LSMOD | $GREP tpm_
e854b2c
+	$LSMOD | $GREP tpm_ >/dev/null 2>&1
e854b2c
+	RETVAL=$?
e854b2c
+	return $RETVAL
e854b2c
 }
e854b2c
 
e854b2c
 start()
e854b2c
 {
e854b2c
-	check_drivers || load_drivers || failure
e854b2c
+	check_drivers
e854b2c
+	RETVAL=$?
e854b2c
+	if [ $RETVAL -ne 0 ]; then
e854b2c
+		load_drivers
e854b2c
+		RETVAL=$?
e854b2c
+	fi
e854b2c
+	if [ $RETVAL -ne 0 ]; then
e854b2c
+		failure $"Loading drivers"
e854b2c
+	fi
e854b2c
 	echo -n $"Starting $prog: "
e854b2c
-	$TCSD $OPTIONS && success || failure
e854b2c
+	$TCSD $START_OPT && success
e854b2c
+	echo
e854b2c
+	touch /var/lock/subsys/tcsd && success
e854b2c
 	RETVAL=$?
e854b2c
-	[ "$RETVAL" = 0 ] && touch /var/lock/subsys/tcsd
e854b2c
 	echo
e854b2c
+	return $RETVAL
e854b2c
 }
e854b2c
 
e854b2c
 stop()