Files
containerd/pkg/oci
Wei Fu 196664bc02 pkg/oci: resolve rootfs symlinks for user lookup
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>
2026-08-21 10:51:45 -04:00
..
2024-01-17 09:55:48 -08:00
2025-06-04 12:45:57 +02:00
2024-01-17 09:55:48 -08:00
2024-01-17 09:55:48 -08:00
2024-01-17 09:55:48 -08:00
2024-01-17 09:55:48 -08:00
2024-05-02 11:03:00 -07:00