diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml index ac6565ec93..f097045b7b 100644 --- a/man/tmpfiles.d.xml +++ b/man/tmpfiles.d.xml @@ -36,6 +36,37 @@ /usr/share/user-tmpfiles.d/*.conf + + #Type Path Mode User Group Age Argument +f /file/to/create mode user group - content +F /file/to/create-or-truncate mode user group - content +w /file/to/write-to - - - - content +d /directory/to/create-and-cleanup mode user group cleanup-age - +D /directory/to/create-and-remove mode user group cleanup-age - +e /directory/to/cleanup mode user group cleanup-age - +v /subvolume/to/create mode user group - - +v /subvolume-or-directory/to/create mode user group - - +Q /subvolume/to/create mode user group - - +p /fifo/to/create mode user group - - +L /symlink/to/create - - - - symlink/target/path +c /dev/char-device-to-create mode user group - - +b /dev/block-device-to-create mode user group - - +# p+, L+, c+, b+ create target unconditionally +C /target/to/create - - - - /source/to/copy +x /path-or-glob/to/ignore - - - - - +X /path-or-glob/to/ignore/recursively - - - - - +r /empty/dir/to/remove - - - - - +R /dir/to/remove/recursively - - - - - +z /path-or-glob/to/adjust/mode mode user group - MAC context +Z /path-or-glob/to/adjust/mode/recursively mode user group - MAC context +t /path-or-glob/to/set/xattrs - - - - xattrs +T /path-or-glob/to/set/xattrs/recursively - - - - xattrs +h /path-or-glob/to/set/attrs - - - - file attrs +H /path-or-glob/to/set/attrs/recursively - - - - file attrs +a /path-or-glob/to/set/acls - - - - POSIX ACLs +A /path-or-glob/to/set/acls/recursively - - - - POSIX ACLs +# a+, A+ append ACLs + diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index ef817fca4f..02eecf3e3a 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -2613,13 +2613,22 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool case COPY_FILES: if (!i.argument) { - i.argument = strappend("/usr/share/factory/", i.path); + i.argument = path_join(arg_root, "/usr/share/factory/", i.path); if (!i.argument) return log_oom(); + } else if (!path_is_absolute(i.argument)) { *invalid_config = true; log_error("[%s:%u] Source path is not absolute.", fname, line); return -EBADMSG; + + } else if (arg_root) { + char *p; + + p = prefix_root(arg_root, i.argument); + if (!p) + return log_oom(); + free_and_replace(i.argument, p); } path_simplify(i.argument, false); @@ -2713,7 +2722,6 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool p = path_join(arg_root, i.path); if (!p) return log_oom(); - free_and_replace(i.path, p); }