tmpfiles: also prefix C source paths with --root
This makes the code match the docs for --root ("all paths will be prefixed"). I think this is reasonable, because --root also works for config paths, and any configuration inside --root must refer to paths under --root. If we allowed C to go "outside of root" in this way, the effect of calling systemd-tmpfiles --root=... and chrooting first and then calling systemd-tmpfiles second would be quite different. I think it's better to keep things simple and consistent. Fixes #12467.
This commit is contained in:
parent
99058cd66a
commit
626f8d1672
|
@ -2638,13 +2638,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);
|
||||
|
@ -2738,7 +2747,6 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool
|
|||
p = prefix_root(arg_root, i.path);
|
||||
if (!p)
|
||||
return log_oom();
|
||||
|
||||
free_and_replace(i.path, p);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue