go 测试/ fstest: 测试文件系统:放松检查基于权限的ReadDir

brqmpdu1  于 8个月前  发布在  Go
关注(0)|答案(4)|浏览(73)

TL;DR

testing/fstest.TestFS中,如果文件的fs.FileMode表示某些用户不允许读取目录,那么ReadDir返回ErrPermission是可以接受的。

上下文

在使用io/fs.FS时,无法选择在读取文件时应用哪些权限位(fs.FileMode)。因此,fstest.TestFS无法强制执行给定基于用户/组/其他权限位的FileMode的文件/目录,应该触发还是不触发OpenReadFileReadDir
目前,任何错误(包括ErrPermission)在ReadDir上都始终被视为错误。然而,如果文件系统强制执行fs.FileMode并且目录具有读权限位关闭,则返回fs.ErrPermission是正确的行为。

建议

我建议在ReadDir上忽略ErrPermission,如果至少有一个权限位未设置:如果 mode & 0444 != 0444 ,则忽略 ErrPermission (并静默跳过其他 ReadDir 检查)。

影响

此更改只会减少一些返回的错误,永远不会引发更多的错误,因此保留了向后兼容性。

50few1ms

50few1ms2#

权限位并非普遍支持;如果 TestFS 应该忽略在没有 Unix 读取权限的情况下打开文件的权限错误,那么它是否应该忽略在 ACL 禁止访问的情况下打开 Windows 文件的权限错误?

1bqhqjot

1bqhqjot3#

请允许我请教您对此的看法(因为您是#46776以及各种io/fs.FS实现的作者)?

wsewodh2

wsewodh24#

@neild fs.FileMode的文档提到:
最低的九位是标准的Unix rwxrwxrwx权限。这些位的值应被视为公共API的一部分,并可用于线协议或磁盘表示中。

相关问题