#!/bin/sh
#
# The systemd-tmpfiles has the ability to grab information
# from the filesystem (instead from the running system).
#
# tmpfs directories (/tmp, /proc, ...) are skipped since they're not
# relevant for the rootfs image.
#
# However there are a few specifiers that *always* will grab
# information from the running system examples are %a, %b, %m, %H
# (Architecture, Boot UUID, Machine UUID, Hostname).
#
# See [1] for historic information.
#
# This script will (conservatively) skip tmpfiles lines that have
# such an specifier to prevent leaking host information.
#
# shell expansion is critical to be POSIX compliant,
# this script wont work with zsh in its default mode for example.
#
# The script takes several measures to handle more complex stuff
# like passing this correctly:
# f+  "/var/example" - - - - %B\n%o\n%w\n%W%%\n
#
# [1] - https://github.com/systemd/systemd/pull/16187

[ -n "${HOST_SYSTEMD_TMPFILES-}" ] ||
    HOST_SYSTEMD_TMPFILES=systemd-tmpfiles

[ -n "${1-}" -a -d "${1-}"/usr/lib/tmpfiles.d ] ||
    { echo 1>&2 "$0: need ROOTFS argument"; exit 1; }

${HOST_SYSTEMD_TMPFILES} --no-pager --cat-config --root="$1" |
    sed -e '/^[[:space:]]*#/d' -e 's,^[[:space:]]*,,' -e '/^$/d' |
    while read -r line; do
        # it is allowed to use quotes around arguments,
        # so let the shell pack the arguments
        eval "set -- $line"

        # dont output warnings for directories we dont process
        [ "${2#/dev}" = "${2}" ] && [ "${2#/proc}" = "${2}" ] &&
            [ "${2#/run}" = "${2}" ] && [ "${2#/sys}" = "${2}" ] &&
            [ "${2#/tmp}" = "${2}" ] && [ "${2#/mnt}" = "${2}" ] ||
            continue

        # blank out all specs that are ok to use,
        # test if some remain. (Specs up to date with v250)
        if echo "$2 ${7-}" | sed -e 's,%[%BCEgGhLMosStTuUVwW],,g' | grep -v -q '%'; then
            # no "bad" specifiers, pass the line unmodified
            eval "printf '%s\n' '$line'"
        else
            # warn
            eval "printf 'ignored spec: %s\n' '$line' 1>&2"
        fi
    done |
    TMPDIR= TEMP= TMP= ${HOST_SYSTEMD_TMPFILES} --create --boot --root="$1" \
        --exclude-prefix=/dev --exclude-prefix=/proc --exclude-prefix=/run \
        --exclude-prefix=/sys --exclude-prefix=/tmp --exclude-prefix=/mnt \
        -
