diff --git a/src/backend/src/services/WebDavFS.js b/src/backend/src/services/WebDavFS.js index 8308c4aed..41f5c8906 100644 --- a/src/backend/src/services/WebDavFS.js +++ b/src/backend/src/services/WebDavFS.js @@ -629,6 +629,20 @@ async function handleWebDavServer(filePath, req, res) { break; case "PUT": try { + // macOS loves polluting webdav directories with metadata which would be stored regularly in HFS+ or APFS. + // We will 422 all of these, because no one actually wants to see them. + const fileName = path.basename(filePath); + if (req.headers["user-agent"].includes("Darwin/") && fileName.toLowerCase() === ".ds_store" || fileName.startsWith("._")) { + res.writeHead(422, { + 'Content-Type': 'application/xml; charset=utf-8' + }); + + res.end(` + + macOS metadata files not permitted +`); + } + // Handle Expect: 100-continue header if (req.headers.expect && req.headers.expect.toLowerCase() === '100-continue') { res.writeContinue();