Skip to content

fix(ftp): refuse MKD of a path that already exists - #3290

Open
jayhemnani9910 wants to merge 1 commit into
OpenListTeam:mainfrom
jayhemnani9910:fix/ftp-mkd-existing
Open

jayhemnani9910 wants to merge 1 commit into
OpenListTeam:mainfrom
jayhemnani9910:fix/ftp-mkd-existing

Conversation

@jayhemnani9910

Copy link
Copy Markdown
Contributor

Summary / 摘要

MKD of a folder that is already there answers as if it made it:

MKD newdir        -> 257 Created dir /newdir
MKD newdir        -> 257 Created dir /newdir     (nothing was created)

FTP clients use the 550 to tell "made it" from "was already there" (mirror and sync tools create folders this way). fs.MakeDir treats an existing folder as success, so the FTP driver passed that through.

ftp.Mkdir now looks the path up first and fails if anything is there, so MKD gets 550. SITE MKDIR goes through AferoAdapter.MkdirAll, which keeps accepting an existing folder, like os.MkdirAll. MKD over a file already gave 550 and still does.

  • This PR has breaking changes.
    / 此 PR 包含破坏性变更。
  • This PR changes public API, config, storage format, or migration behavior.
    / 此 PR 修改了公开 API、配置、存储格式或迁移行为。
  • This PR requires corresponding changes in related repositories.
    / 此 PR 需要关联仓库同步修改。

Testing / 测试

  • go test ./... (only pkg/aria2/rpc fails: it needs an aria2 daemon on :6800, same on main)

  • Manual test / 手动测试:

  • Built main and this branch, local storage at /, FTP on, Python ftplib: on main a second MKD newdir answers 257; here it answers 550 "file or directory already exists". A new folder and nested folders still give 257, and SITE MKDIR on an existing folder still gives 250.

  • New TestMkdirRefusesExistingPath (in-memory DB + Local storage); against main's Mkdir it fails on the existing folder. go test ./server/... ./internal/... passes.

Checklist / 检查清单

  • I have read CONTRIBUTING.
    / 我已阅读 CONTRIBUTING。
  • I confirm this contribution follows the repository license, contribution policy, and code of conduct.
    / 我确认此贡献符合仓库许可证、贡献规范和行为准则。
  • I have formatted the changed code with gofmt, go fmt, or prettier where applicable.
    / 我已按适用情况使用 gofmt、go fmt 或 prettier 格式化变更代码。
  • I have requested review from relevant maintainers or code owners where applicable.
    / 我已在适用情况下请求相关维护者或代码所有者审查。

AI Disclosure / AI 使用声明

  • This PR includes AI-assisted content.
    / 此 PR 包含 AI 辅助内容。

Tools used / 使用工具:

  • Claude

Usage scope / 使用范围:

  • Code generation / 代码生成

  • Tests / 测试

  • I have reviewed and validated all AI-assisted content included in this PR.
    / 我已审核并验证此 PR 中的所有 AI 辅助内容。

MKD on an existing directory replied 257 because fs.MakeDir treats an
existing directory as success. Check the path first and fail, so MKD
gets 550 like other FTP servers. SITE MKDIR goes through MkdirAll, which
keeps accepting an existing directory.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant