# Copyright (c) 2011 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.

# cros-disks upstart job

env CROS_DISKS_OPTS=''

# Set the default polling interval in milliseconds on block devices.
# This in-kernel polling mechanism is available since kernel 2.6.38.
# The poll timer slack is set to 25% in kernel (linux/block/genhd.c).
# With a polling interval <= 1 second, the system seems to react to
# eject requests from a CD-ROM drive more responsively.
env BLOCK_DEFAULT_POLL_MSECS=1000
env BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH=/sys/module/block/parameters/events_dfl_poll_msecs

# Minimum log level defined in base/logging.h.
#   0:INFO, 1:WARNING, 2:ERROR, 3:ERROR_REPORT, 4:FATAL
#   -1:VLOG(1), -2:VLOG(2), etc
# Set to log only INFO or above by default.
env CROS_DISKS_LOG_LEVEL=1

# Importing the TZ environment variable to allow the time zone to be changed
# for tests.
import TZ

start on starting system-services
stop on stopping system-services

pre-start script
  # The TZ variable is only allowed to exist in test builds for running
  # autotests. The existence, even if set to empty, of TZ interferes with the
  # regular functioning of the system timezone.
  if crossystem "cros_debug?0" && [ -n "${TZ+set}" ]; then
    logger -t "${UPSTART_JOB}" "TZ variable set in non-debug mode"
    exit 1
  fi

  # Set default polling interval on block devices.
  # This only affects block devices with removable media, which do not
  # support asynchronous media change/eject events.
  if [ -f "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}" ]; then
    echo "${BLOCK_DEFAULT_POLL_MSECS}" > "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}"
  fi

  # Load the FUSE module, which is used by various FUSE mounters.
  # cros-disks should still run even if the FUSE module fails to load.
  logger -t "${UPSTART_JOB}" "Loading FUSE module"
  modprobe fuse || logger -t "${UPSTART_JOB}" "Failed to load FUSE module"

  # /run/fuse is used to hold temporary directories for individual
  # FUSE mount helpers invocations.
  dirs="/run/fuse"
  mkdir -p ${dirs}
  chown cros-disks:cros-disks ${dirs}
  chmod 0775 ${dirs}
end script

post-stop script
  if [ -f "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}" ]; then
    # Disable default polling on block devices.
    echo 0 > "${BLOCK_DEFAULT_POLL_MSECS_SYSFS_PATH}"
  fi
end script

respawn
expect fork

# Run cros-disks under Minijail as follows:
# - Enter new IPC (-l) namespace.
#
# - Remain in the original network namespace in order to join to the system
#   DBus.
#
# - Remain in the original cgroup namespace as it isn't supported on systems
#   running kernel 3.8. TODO(benchan): Put cros-disks in new cgroup namespace
#   once all systems support it.
#
# - Temporarily skip new mount (-v) and PID (-p) namespace as cros-disks
#   needs to access /home/user/<hash> for archive support, which isn't
#   accessible inside a new mount namespace. TODO(benchan): Put cros-disks in
#   new mount and PID namespace after archive support in cros-disks is
#   deprecated (chromium:707327).
#
# - To let upstart track the cros-disks process properly according to the
#   'expect fork' stanza, Minijail exits immediately after fork (-i) while
#   cros-disks stays in foreground (--foreground) without daemonizing itself.
#
# - Use -K to prevent Minijail from remounting the shared mount at /media as
#   private.
#   TODO(benchan): Remove -K once Minijail provides a finer control over
#   what should be remounted private and what can remain shared (b:62056108).
#
# - Do not lock SECBIT_KEEP_CAPS (-B 0x20) such that nested minijail invocations
#   can enable the bit again to pass capabilities.
#
exec minijail0 -u cros-disks -g cros-disks -G \
  -c cap_chown,cap_setgid,cap_setuid,cap_sys_admin,cap_sys_chroot,cap_mknod,cap_setpcap=e \
  --ambient -B 0x20 \
  -i -l -n \
  -- /usr/bin/cros-disks --foreground \
       --log_level="${CROS_DISKS_LOG_LEVEL}" ${CROS_DISKS_OPTS}
