diff options
author | Arian van Putten <arian.vanputten@gmail.com> | 2020-12-20 23:11:57 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-01-12 18:29:19 +0100 |
commit | 089cd8b34b5732e57321c92c16382dc8366faa42 (patch) | |
tree | 2c20649ae7c5e544a74a1c5a30dd04da5757edef /src/nspawn | |
parent | timedate: actually reset system time with new timezone (diff) | |
download | systemd-089cd8b34b5732e57321c92c16382dc8366faa42.tar.xz systemd-089cd8b34b5732e57321c92c16382dc8366faa42.zip |
nspawn: make rootfs relative to oci bundle path
This is inline with the OCI runtime spec:
On POSIX platforms, path is either an absolute path or a relative path
to the bundle. For example, with a bundle at /to/bundle and a root
filesystem at /to/bundle/rootfs, the path value can be either
/to/bundle/rootfs or rootfs. The value SHOULD be the conventional
rootfs.
(https://github.com/opencontainers/runtime-spec/blob/master/config.md)
Diffstat (limited to 'src/nspawn')
-rw-r--r-- | src/nspawn/nspawn-oci.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c index ccbae616ca..fe5768b022 100644 --- a/src/nspawn/nspawn-oci.c +++ b/src/nspawn/nspawn-oci.c @@ -444,6 +444,8 @@ static int oci_process(const char *name, JsonVariant *v, JsonDispatchFlags flags } static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) { + Settings *s = userdata; + int r; static const JsonDispatch table[] = { { "path", JSON_VARIANT_STRING, json_dispatch_string, offsetof(Settings, root) }, @@ -451,7 +453,21 @@ static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, v {} }; - return json_dispatch(v, table, oci_unexpected, flags, userdata); + r = json_dispatch(v, table, oci_unexpected, flags, s); + if (r < 0) + return r; + + if (s->root && !path_is_absolute(s->root)) { + char *joined; + + joined = path_join(s->bundle, s->root); + if (!joined) + return log_oom(); + + free_and_replace(s->root, joined); + } + + return 0; } static int oci_hostname(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) { |