mirror of
https://github.com/containerd/containerd.git
synced 2026-11-06 13:27:16 +00:00
Some rootfs may use symlinks for /etc/passwd and /etc/group. For example,
NixOS uses absolute symlinks to files in /nix/store. os.Root is not used
because it rejects absolute symlinks.
The previous code only handled a symlink on the final path. Add a helper to
resolve symlinks in every path component with fs.ReadLinkFS. Absolute symlinks
are resolved from the rootfs, and the final path is still opened with fs.FS.
When tracing a path through symbolic links, the maximum number of links that
can be followed is [40][1].
NOTE:
The interface behaviour has been changed so I update the pkg/oci
testcase TestWithAppendAdditionalGroupsNoEtcGroup
```diff
--- a/pkg/oci/spec_opts_linux_test.go
+++ b/pkg/oci/spec_opts_linux_test.go
@@ -748,7 +748,7 @@ func TestWithAppendAdditionalGroupsNoEtcGroup(t *testing.T) {
{
name: "no additional gids, append root group",
groups: []string{"root"},
- err: "unable to find group root: openat etc/group: no such file or directory",
+ err: "unable to find group root: statat etc: no such file or directory",
expected: []uint32{0},
},
{
```
[1]: <https://man7.org/linux/man-pages/man7/path_resolution.7.html>
Signed-off-by: Wei Fu <fuweid89@gmail.com>
(cherry picked from commit a8fc3a0172)
Signed-off-by: Wei Fu <fuweid89@gmail.com>