# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Trousers daemon, which talks to the TPM (or the TPM emulator).
# Started directly from tpm-probe.

# Note, this line is modified by chromeos-factoryinstall.ebuild
# Please do not change without also changing this reference.
stop on starting halt or starting reboot

respawn
expect fork

pre-start script
  export TPM_DEVICE_PATH=/dev/tpm  # /dev/tpm0 may not be created yet

  # Temporary fix for BIOS bug.  Very Soon[tm] this fix will be in the BIOS.
  status=$(/usr/bin/tpm_init_temp_fix || true)
  /usr/bin/logger "tpm fix status: $status"
  # end of temporary fix

  # If we're booting in recovery mode, first do a sanity check of the TPM and
  # try to bring it to a sane state.  Then clear the TPM owner and lock the
  # TPM down.
  binf1=/sys/devices/platform/chromeos_acpi/BINF.1
  if [ -e $binf1 -a "$(cat $binf1)" = "0" ]; then
    /usr/sbin/chromeos-tpm-recovery /var/log/tpm-recovery.log \
        || logger "tpm-recovery: status $?"
    tpmc clear  || logger "tpmc clear:  status $?"
    tpmc enable || logger "tpmc enable: status $?"
    tpmc act    || logger "tpmc act:    status $?"
    tpmc block  || logger "tpmc block:  status $?"
    tpmc pplock || logger "tpmc pplock: status $?"
  fi

  if [ -e /sys/class/misc/tpm0/device/owned ]; then
    owned=$(cat /sys/class/misc/tpm0/device/owned || echo "")
    if [ "$owned" -eq "0" ]; then
      # Clean up any existing tcsd state.
      rm -rf /var/lib/tpm/*
    elif [ "$owned" -eq "1" ]; then
      # Already owned.
      # Check if trousers' system.data is size zero.  If so, then the TPM has
      # been owned already and we need to copy over an empty system.data to be
      # able to use it in trousers.
      if [ ! -f /var/lib/tpm/system.data ] || \
         [ ! -s /var/lib/tpm/system.data ]; then
        if [ ! -e /var/lib/tpm ]; then
          mkdir -m 0700 -p /var/lib/tpm
        fi
        umask 0177
        cp --no-preserve=mode /etc/trousers/system.data.auth \
          /var/lib/tpm/system.data
        umask 0133
        touch /var/lib/.tpm_owned
      fi
    fi
  fi
end script

exec /usr/sbin/tcsd
