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