From 39c9a85f80a3a2b1aff710c6cbd1190b2aab1b83 Mon Sep 17 00:00:00 2001 From: Luccin Masirika <53916378+luccinmasirika@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:44:19 +0200 Subject: [PATCH] fileserver: append repeated `hide` subdirectives instead of overwriting (#7817) Multiple `hide` subdirectives in a file_server Caddyfile block silently overwrote each other, so only the last one took effect. Append to the list instead, so repeated entries accumulate and imported snippets can compose with site-specific hides. --- .../file_server_hide_repeated.caddyfiletest | 35 +++++++++++++++++++ modules/caddyhttp/fileserver/caddyfile.go | 8 +++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 caddytest/integration/caddyfile_adapt/file_server_hide_repeated.caddyfiletest diff --git a/caddytest/integration/caddyfile_adapt/file_server_hide_repeated.caddyfiletest b/caddytest/integration/caddyfile_adapt/file_server_hide_repeated.caddyfiletest new file mode 100644 index 000000000..14ec13e95 --- /dev/null +++ b/caddytest/integration/caddyfile_adapt/file_server_hide_repeated.caddyfiletest @@ -0,0 +1,35 @@ +:80 + +file_server { + hide first.txt + hide second.txt third.txt +} +---------- +{ + "apps": { + "http": { + "servers": { + "srv0": { + "listen": [ + ":80" + ], + "routes": [ + { + "handle": [ + { + "handler": "file_server", + "hide": [ + "first.txt", + "second.txt", + "third.txt", + "./Caddyfile" + ] + } + ] + } + ] + } + } + } + } +} diff --git a/modules/caddyhttp/fileserver/caddyfile.go b/modules/caddyhttp/fileserver/caddyfile.go index 80a37322b..4000690b9 100644 --- a/modules/caddyhttp/fileserver/caddyfile.go +++ b/modules/caddyhttp/fileserver/caddyfile.go @@ -91,10 +91,14 @@ func (fsrv *FileServer) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { fsrv.FileSystem = d.Val() case "hide": - fsrv.Hide = d.RemainingArgs() - if len(fsrv.Hide) == 0 { + hide := d.RemainingArgs() + if len(hide) == 0 { return d.ArgErr() } + // Append so that repeated "hide" subdirectives accumulate + // instead of overwriting, which also lets imported snippets + // compose with site-specific hides. + fsrv.Hide = append(fsrv.Hide, hide...) case "index": fsrv.IndexNames = d.RemainingArgs()