# Copyright 2018 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.

description     "OOBE Config Restore daemon"
author          "chromium-os-dev@chromium.org"

# NOTE: The ebuild will erase the "and started tcsd" part for TPM2 devices.
start on started boot-services and started tcsd
stop on stopping boot-services

# 32MByte RLIMIT_MEMLOCK, this is required because oobe_config_restore uses
# SecureBlob to store owner key, install attributes and shill default profile,
# and SecureBlob uses mlock().
limit memlock 33554432 33554432

# Process is not system critical but may also not recover if killed.
oom score -400

pre-start script
  mkdir -m 700 -p /var/lib/oobe_config_restore
  chown oobe_config_restore:oobe_config_restore /var/lib/oobe_config_restore

  # If OOBE is already completed then don't start the service.
  if [ -f "/home/chronos/.oobe_completed" ]; then
    stop
  fi

  if [ -d "/mnt/stateful_partition/unencrypted/oobe_auto_config" ]; then
    /usr/sbin/store_usb_oobe_config
  fi
end script

# Minijail actually forks off the desired process.
expect fork

# --profile=minimalistic-mountns Set up a minimalistic mount namespace
# -i makes sure minijail0 exits right away.
# -p Enter a new PID namespace and run the process as init (pid=1).
# -I Runs program as init inside a new pid namespace.
# -l Enter a new IPC namespace.
# -N Enter a new cgroup namespace.
# --uts Enters a new UTS namespace.
# -n Sets the no_new_privs bit.
# -S Apply seccomp filters.
# -k Creates a mount as container for -b.
# -b Bind mounts various directories we need.
# -u Run as oobe_config_restore user.
# -G Run with oobe_config_restore's groups.

# NOTE: The ebuild erases the "-b /run/tcsd" line on TPM2 devices.
exec minijail0 \
    --profile=minimalistic-mountns \
    -i \
    -p -I \
    -l \
    -N \
    --uts \
    -n \
    -k '/sys,/sys,tmpfs' \
    -b /sys/fs/pstore \
    -b /dev/log \
    -k '/run,/run,tmpfs' \
    -b /run/dbus \
    -b /run/tcsd \
    -k '/var,/var,tmpfs' \
    -b /var/lib/metrics,,1 \
    -b /var/lib/oobe_config_restore,,1 \
    -k '/mnt/stateful_partition,/mnt/stateful_partition,tmpfs,' \
    -b /mnt/stateful_partition/unencrypted/preserve \
    -u oobe_config_restore  \
    -G \
    -S /usr/share/policy/oobe_config_restore-seccomp.policy \
    /usr/sbin/oobe_config_restore

post-start exec minijail0 -u oobe_config_restore -G \
    /usr/bin/gdbus wait --system --timeout 15 org.chromium.OobeConfigRestore
