Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

WebDAV PROPFIND returns 404 for displayname/resourcetype after successful PUT, causing rclone to fail

未关闭
#102 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
java
领域
api, backend

调研方向

从 WebDAV fallback mounter 的入口点 org.cryptomator.frontend.webdav.mount.FallbackMounter 开始,并使用提供的 rclone 命令重现请求序列。当上传的普通文件能够在 PROPFIND 中连同其长度和修改时间一起成功返回 displayname 和 resourcetype,使 rclone 能够完成复制时,修复就完成了。

由索引模型根据 Issue 内容生成。

描述

Please agree to the following
Summary

When using Cryptomator CLI with the WebDAV mounter, uploading a file via WebDAV succeeds with 201 Created, and the uploaded file can be read back with curl.

However, rclone fails immediately after the successful PUT, because its follow-up PROPFIND receives a 207 Multi-Status response where some requested properties return 404 Not Found while others return 200 OK.

Specifically, for an uploaded file:

displayname  -> 404 Not Found
resourcetype -> 404 Not Found
getlastmodified -> 200 OK
getcontentlength -> 200 OK

This causes rclone to treat the object as missing and fail with:

Failed to copy: object not found
What software is involved?
  • Operating System: Debian 13
  • Cryptomator CLI: 0.6.2
  • Rclone: 1.74.2
Volume Type

WebDAV (HTTP Address)

Steps to Reproduce
  1. Start Cryptomator CLI with the WebDAV fallback mounter, for example:
cryptomator-cli unlock \
  --mounter=org.cryptomator.frontend.webdav.mount.FallbackMounter \
  --volumeId=vault \
  --loopbackPort=59317 \
  "/tmp/test-vault"
  1. In another terminal, prepare a test file:
mkdir -p /tmp/rclone-webdav-src
printf 'hello from rclone webdav trace\n' > /tmp/rclone-webdav-src/test.txt
  1. Run rclone against the Cryptomator WebDAV endpoint:
rclone copy /tmp/rclone-webdav-src :webdav:rclone-trace-test \
  --config /dev/null \
  --webdav-url "http://127.0.0.1:59317/vault/" \
  --webdav-vendor other \
  --webdav-user cryptomator \
  --webdav-pass "$(rclone obscure cryptomator)" \
  --transfers 1 \
  --checkers 1 \
  --retries 1 \
  --low-level-retries 1 \
  --dump headers,bodies \
  -vv
  1. As a control test, uploading and reading the same file with curl works:
curl -u cryptomator:cryptomator \
  -X MKCOL \
  "http://127.0.0.1:59317/vault/curl-control/"

curl -u cryptomator:cryptomator \
  -T /tmp/rclone-webdav-src/test.txt \
  "http://127.0.0.1:59317/vault/curl-control/test.txt"

curl -u cryptomator:cryptomator \
  "http://127.0.0.1:59317/vault/curl-control/test.txt"
  1. The final curl command returns:
hello from rclone webdav trace
Expected Behavior

After a successful PUT, the uploaded file should be discoverable through PROPFIND in a way that common WebDAV clients can recognize it as an existing regular file.

For the properties requested by rclone:

<d:displayname/>
<d:getlastmodified/>
<d:getcontentlength/>
<d:resourcetype/>

the response should allow the client to determine that:

  • the resource exists
  • it is a regular file, not a collection
  • its content length is available
  • its last modified timestamp is available

Ideally, displayname, getlastmodified, getcontentlength, and resourcetype should be returned in a successful 200 OK propstat for an existing file. For a regular file, resourcetype can be returned as an empty property.

rclone should be able to complete the upload successfully instead of failing after the successful PUT with object not found.

Actual Behavior

The PUT succeeds:

PUT /vault/rclone-trace-test/test.txt HTTP/1.1
HTTP/1.1 201 Created

But the follow-up PROPFIND returns a mixed 207 Multi-Status response:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<D:multistatus xmlns:D="DAV:">
  <D:response>
    <D:href>http://127.0.0.1:59317/vault/rclone-trace-test/test.txt</D:href>
    <D:propstat>
      <D:prop>
        <D:displayname/>
        <D:resourcetype/>
      </D:prop>
      <D:status>HTTP/1.1 404 Not Found</D:status>
    </D:propstat>
    <D:propstat>
      <D:prop>
        <D:getlastmodified>Fri, 5 Jun 2026 21:18:54 GMT</D:getlastmodified>
        <D:getcontentlength>31</D:getcontentlength>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
</D:multistatus>

rclone then fails with:

Failed to copy: object not found
Reproducibility

Always

Relevant Log Output

rclone:

PROPFIND /vault/rclone-trace-test HTTP/1.1
HTTP/1.1 404 Not Found

PROPFIND /vault/rclone-trace-test/ HTTP/1.1
HTTP/1.1 404 Not Found

MKCOL /vault/rclone-trace-test/ HTTP/1.1
HTTP/1.1 201 Created

PUT /vault/rclone-trace-test/test.txt HTTP/1.1
Content-Length: 31

hello from rclone webdav trace

HTTP/1.1 201 Created

PROPFIND /vault/rclone-trace-test/test.txt HTTP/1.1
HTTP/1.1 207 Multi-Status

<?xml version="1.0" encoding="UTF-8" standalone="no"?><D:multistatus xmlns:D="DAV:"><D:response><D:href>http://127.0.0.1:59317/vault/rclone-trace-test/test.txt</D:href><D:propstat><D:prop><D:displayname/><D:resourcetype/></D:prop><D:status>HTTP/1.1 404 Not Found</D:status></D:propstat><D:propstat><D:prop><D:getlastmodified>Fri, 5 Jun 2026 21:18:54 GMT</D:getlastmodified><D:getcontentlength>31</D:getcontentlength></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>

ERROR : test.txt: Failed to copy: object not found
NOTICE: Failed to copy: object not found
Anything else?

No response

主要语言
Java
星标
429
派生
51
PR 合并指标
30 天内没有已合并 PR

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

cryptomator/cli 的其他 Issue

查看 cryptomator/cli 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。