blob: 516d09e5a1eb832cc2901e218ad9b71e3e9ee560 [file] [log] [blame]
# Copyright 2016 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 "CUPS daemon"
author "chromium-os-dev@chromium.org"
env user=cups
env lp_group=cups
env admin_group=lpadmin
env printer_root=/var/cache/cups/printers
env seccomp_flags="-S /usr/share/policy/cupsd-seccomp.policy"
# Start only on request.
start on socket PROTO=unix SOCKET_PATH=/run/cups/cups.sock
stop on stopping ui
pre-start script
# Wait for cups-clear-state.conf to finish running to prevent a potential
# race condition.
until [ -f /run/cups/stamp ]; do
logger -t "${UPSTART_JOB}" "Waiting for /run/cups/stamp"
sleep 1
done
fail_if_symlink() {
local abs="$(readlink -f .)"
if [ "$1" != "${abs}" ]; then
logger -t "${UPSTART_JOB}" "'$1' resolves to '${abs}'"
exit 1
fi
}
# dir: directory to create (if necessary)
# perm: permissions to set for the directory
# group (optional): group to own the directory; defaults to ${lp_group}
check_create() {
local dir="$1"
local perm="$2"
local group="${3:-${lp_group}}"
# If it's not a directory currently, clean it up.
rm -f "${dir}" 2>/dev/null || :
mkdir -p "${dir}"
# Use working directory instead of path to avoid chown and chmod being
# applied to a linked path.
local original_wd="${PWD}"
cd "${dir}"
fail_if_symlink "${dir}"
chown -h ${user}:${group} .
chmod "${perm}" .
cd "${original_wd}"
}
check_create /var/spool/cups 0710
check_create /var/spool/cups/tmp 0770
check_create /var/cache/cups 0770
check_create /var/cache/cups/rss 0775
check_create /run/cups 0755
check_create /run/cups/certs 0711 ${admin_group}
# PrinterRoot keeps printers.conf and ppd/PRINTERNAME.ppd configuration
# data
check_create "${printer_root}" 0755
check_create "${printer_root}"/ppd 0755
# Clear old job files and history
original_wd="${PWD}"
cd "/var/spool/cups"
fail_if_symlink "/var/spool/cups"
rm -f ./{c,d}* ./job.cache*
cd "${original_wd}"
end script
# TODO(xiaochu): use -b instead of -K. crbug.com/811473
exec minijail0 -u ${user} -g nobody -G -I -l -n -r -v -K ${seccomp_flags} -- \
/usr/sbin/cupsd -f -l