return log_error_errno(errno, "Failed to openat(%s): %m", i->path);
}
+ if (r < 0 && !IN_SET(r, -EEXIST, -EROFS))
+ return log_error_errno(r, "Failed to copy files to %s: %m", i->path);
+
if (fstat(fd, &st) < 0)
return log_error_errno(errno, "Failed to fstat(%s): %m", i->path);
set -eux
set -o pipefail
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
+
rm -fr /tmp/{f,F,w}
mkdir /tmp/{f,F,w}
touch /tmp/file-owned-by-root
EOF
test ! -e /tmp/F/daemon/unsafe-symlink/exploit
+#
+# 'C'
+#
+rm -rf /tmp/C-copy-failure-src /tmp/C-copy-failure-dst
+mkdir /tmp/C-copy-failure-src /tmp/C-copy-failure-dst
+printf payload >/tmp/C-copy-failure-src/file
+chmod 555 /tmp/C-copy-failure-dst
+
+(! runas nobody systemd-tmpfiles --create - <<EOF
+C /tmp/C-copy-failure-dst - - - - /tmp/C-copy-failure-src
+EOF
+)
+test ! -e /tmp/C-copy-failure-dst/file
+chmod 755 /tmp/C-copy-failure-dst
+rm -rf /tmp/C-copy-failure-src /tmp/C-copy-failure-dst
+
#
# 'w'
#