#3076·seafile

Two libraries differing only by letter case collide into one folder on Windows clients

Author: nguyennghianhCreated Sep 8, 2026Updated Sep 8, 2026

Target repo: haiwen/seafile (server) + SeaDrive Windows client Versions: Seafile Server CE 12.0.14 (Linux) · SeaDrive client 3.0.22 (Windows)

Summary

Seafile's storage and its Linux/web UI are case-sensitive, so the server happily accepts two libraries whose names differ only by letter case, e.g. sample and Sample. On a Windows client (SeaDrive virtual drive, NTFS/Win32 path resolution is case-insensitive), both libraries map to the same virtual path (e.g. S:\sampleS:\Sample) and end up colliding into a single folder: content from both libraries appears mixed under one folder, and it is ambiguous which library a file actually belongs to. Users can silently browse, edit and sync into the wrong library without any warning.

Steps to reproduce

  1. On the web UI or via API (server on Linux), user creates two libraries: sample and Sample (identical names modulo case). The server accepts both — no error.
  2. Sign in with a Windows SeaDrive client as a user who has access to both libraries.
  3. Open the SeaDrive drive — instead of two distinct entries, the two libraries resolve to one shared folder path and their contents get mixed/confused.

Actual result

  • Server-side (and on Linux seadrive-fuse mounts) the two libraries remain distinct.
  • On Windows the virtual drive cannot represent both names; the libraries are merged into a single folder view. Files from sample and Sample appear interleaved; writes may land in either library depending on which entry the shell resolves.
  • No warning is ever shown, on server or client.

(We hit exactly this in production with sample vs Sample. Workaround used: rename one library to a clearly different name, sample.bak, and adopt a manual rule to always verify names case-exactly.)

Expected result

The server should offer a compatibility mode — call it "Windows mode" — which, when enabled:

  • Rejects creating a library whose name matches an existing library name case-insensitively (e.g. Sample when sample exists), with a clear error message.
  • Ideally also applies the same case-insensitive uniqueness check to folders within a library (same collision happens for folder vs Folder inside one library on Windows clients).

This prevents the problem at the source instead of leaving it to be discovered as silent data mixing on Windows clients.

Environment

  • Seafile CE 12.0.14, Linux server, multiple users on Windows SeaDrive 3.0.22.