From e12c250705f727543e342d791146f4ef1f1d4bb3 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Wed, 15 Apr 2026 12:19:18 +0100 Subject: [PATCH] s3: fix empty delimiter parameter rejected by Archiware P5 server Some S3-compatible servers (e.g. Archiware P5) reject requests with an empty `?delimiter=` query parameter. For recursive listings, pass `nil` instead of a pointer to an empty string so the parameter is omitted entirely from the request. Fixes #9342 --- backend/s3/s3.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index 5bfc118a9..2543c01f9 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -2343,9 +2343,11 @@ func (f *Fs) list(ctx context.Context, opt listOpt, fn listFn) error { opt.directory += "/" } } - delimiter := "" + // Use nil delimiter for recursive listings to omit the parameter + // entirely. Some S3-compatible servers reject an empty delimiter. + var delimiter *string if !opt.recurse { - delimiter = "/" + delimiter = aws.String("/") } // URL encode the listings so we can use control characters in object names // See: https://github.com/aws/aws-sdk-go/issues/1914 @@ -2365,7 +2367,7 @@ func (f *Fs) list(ctx context.Context, opt listOpt, fn listFn) error { urlEncodeListings := f.opt.ListURLEncode.Value req := s3.ListObjectsV2Input{ Bucket: &opt.bucket, - Delimiter: &delimiter, + Delimiter: delimiter, Prefix: &opt.directory, MaxKeys: &f.opt.ListChunk, }