mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-13 02:09:08 +02:00
The legacy bootstrap stored the cluster as the caller spelled it — trimmed, never folded — and the reshape that shipped in 0.78 copied it into proxy_address, and subdomain.cluster into domain, verbatim. Everything that reads those columns compares against canonical lowercase: proxies canonicalise their address at connect, the gateway-pin check a proxy registration runs matches proxy_address exactly, cluster-scoped synthesis finds an account's row by proxy_address, and the proxy folds the SNI host before matching a mapping's domain. A row that kept capitals is invisible to all of them — its pin protects nothing and its endpoint never routes. The reshape now writes LOWER() for both columns, and an idempotent normaliser lowercases rows a released reshape already copied, registered right after it. The predicate selects only rows that would change, so a normalised table costs one pass over one row per account; on MySQL the default collation compares case-insensitively already and it is a no-op. Reported by cubic on #7402: the exact proxy_address match a proxy registration relies on misses a migrated pin with capitals. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa3DsBDP3VciAi4PPG17L6