go x/net/webdav: microsoft miniredirector 设置目录属性失败

jvidinwx  于 3个月前  发布在  Go
关注(0)|答案(4)|浏览(43)

你使用的Go版本是什么(go version)?

$ go version
go version go1.15 linux/amd64

这个问题在最新版本的发布中是否重现?

是的

你正在使用什么操作系统和处理器架构(go env)?

go env 输出

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/kyle/.cache/go-build"
GOENV="/home/kyle/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/kyle/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/kyle/"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build009155035=/tmp/go-build -gno-record-gcc-switches"

你做了什么?

运行了一个简单的 Package 器,围绕x/net/webdav。将Windows迷你重定向器指向它,然后尝试克隆golang/net: git clone https://github.com/golang/net.git

你期望看到什么?

git clone成功。

你看到了什么?

Z:\>git clone https://github.com/golang/net.git
Cloning into 'net'...
//files.kyle-shares.agilicus.cloud@SSL/DavWWWRoot/agent/net/.git: Input/output error

深入研究后,很明显这个问题是由于Windows试图设置属性目录,如./.git。我在proppatch处理程序中添加了一些日志记录,并发现它执行了这些操作:

2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32CreationTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32LastAccessTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32LastModifiedTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32FileAttributes}
2021/01/26 12:16:21 Fail on patch: open /home/kyle/shared/net: is a directory
ie3xauqp

ie3xauqp1#

我能够在测试中解决这个问题,首先检查文件是否为目录,然后对每个补丁返回禁止。这似乎至少让它继续前进了。我们可能需要考虑一种更抽象的处理方式,但我现在会提交一个补丁,因为我们需要修复这个用例。

wz1wpwve

wz1wpwve2#

https://golang.org/cl/286992提到了这个问题:webdav: return forbidden on failed proppatch

a14dhokn

a14dhokn3#

最近出现了一个问题 - 请查看 https://forum.rclone.org/t/writeable-readonly-directories/21919/
当您尝试以读/写模式打开目录时,Rclone已经返回了 EPERM(错误权限)。Windows似乎将其视为正常,因为它没有报告错误。然而,它在日志中留下了一个讨厌的错误。
您的补丁看起来也能解决我们的问题。
您是否尝试过将您的WebDAV实现与Windows资源管理器一起使用?

wkyowqbh

wkyowqbh4#

@ncw 很棒,我很高兴听到它能解决你的问题!
我测试了使用Linux的davfs2和Windows资源管理器(通过Map网络驱动器)。问题只出现在使用Windows资源管理器时。在我的应用补丁到位后,这个问题完全消失了。

相关问题