diff --git a/internal/http/services/owncloud/ocdav/propfind.go b/internal/http/services/owncloud/ocdav/propfind.go index 81fc9443d5..315f1bc0eb 100644 --- a/internal/http/services/owncloud/ocdav/propfind.go +++ b/internal/http/services/owncloud/ocdav/propfind.go @@ -293,8 +293,7 @@ func (s *svc) mdToPropResponse(ctx context.Context, pf *propfindXML, md *provide // etags must be enclosed in double quotes and cannot contain them. // See https://tools.ietf.org/html/rfc7232#section-2.3 for details // TODO(jfd) handle weak tags that start with 'W/' - etag := fmt.Sprintf("\"%s\"", strings.Trim(md.Etag, "\"")) - response.Propstat[0].Prop = append(response.Propstat[0].Prop, s.newProp("d:getetag", etag)) + response.Propstat[0].Prop = append(response.Propstat[0].Prop, s.newProp("d:getetag", md.Etag)) } if md.PermissionSet != nil { diff --git a/pkg/storage/fs/eosgrpc/eosgrpc.go b/pkg/storage/fs/eosgrpc/eosgrpc.go index 4b0f38e19c..7e63e862ee 100644 --- a/pkg/storage/fs/eosgrpc/eosgrpc.go +++ b/pkg/storage/fs/eosgrpc/eosgrpc.go @@ -1372,7 +1372,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclientgrpc.FileInf Id: &provider.ResourceId{OpaqueId: fmt.Sprintf("%d", eosFileInfo.Inode)}, Path: path, Owner: &userpb.UserId{OpaqueId: username}, - Etag: eosFileInfo.ETag, + Etag: fmt.Sprintf("\"%s\"", strings.Trim(eosFileInfo.ETag, "\"")), MimeType: mime.Detect(eosFileInfo.IsDir, path), Size: size, PermissionSet: &provider.ResourcePermissions{ListContainer: true, CreateContainer: true}, diff --git a/pkg/storage/fs/owncloud/owncloud.go b/pkg/storage/fs/owncloud/owncloud.go index 0d7ccaff2d..4f2509c03a 100644 --- a/pkg/storage/fs/owncloud/owncloud.go +++ b/pkg/storage/fs/owncloud/owncloud.go @@ -1010,7 +1010,8 @@ func (fs *ocfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referenc // TODO(jfd) any other metadata that is interesting? fileid? if val, ok := md.Metadata["etag"]; ok { etag := calcEtag(ctx, fi) - if etag == md.Metadata["etag"] { + val = fmt.Sprintf("\"%s\"", strings.Trim(val, "\"")) + if etag == val { log.Debug(). Str("np", np). Str("etag", val). diff --git a/pkg/storage/fs/owncloud/owncloud_unix.go b/pkg/storage/fs/owncloud/owncloud_unix.go index 26bb3b0cea..5530c453e7 100755 --- a/pkg/storage/fs/owncloud/owncloud_unix.go +++ b/pkg/storage/fs/owncloud/owncloud_unix.go @@ -26,6 +26,7 @@ import ( "encoding/binary" "fmt" "os" + "strings" "syscall" "github.com/cs3org/reva/pkg/appctx" @@ -62,5 +63,6 @@ func calcEtag(ctx context.Context, fi os.FileInfo) string { if err != nil { log.Error().Err(err).Msg("error writing size") } - return fmt.Sprintf(`"%x"`, h.Sum(nil)) + etag := fmt.Sprintf(`"%x"`, h.Sum(nil)) + return fmt.Sprintf("\"%s\"", strings.Trim(etag, "\"")) } diff --git a/pkg/storage/fs/owncloud/owncloud_windows.go b/pkg/storage/fs/owncloud/owncloud_windows.go index 82cbd911b6..e041b6d028 100644 --- a/pkg/storage/fs/owncloud/owncloud_windows.go +++ b/pkg/storage/fs/owncloud/owncloud_windows.go @@ -26,6 +26,7 @@ import ( "encoding/binary" "fmt" "os" + "strings" "github.com/cs3org/reva/pkg/appctx" ) @@ -48,5 +49,6 @@ func calcEtag(ctx context.Context, fi os.FileInfo) string { if err != nil { log.Error().Err(err).Msg("error writing size") } - return fmt.Sprintf(`"%x"`, h.Sum(nil)) + etag := fmt.Sprintf(`"%x"`, h.Sum(nil)) + return fmt.Sprintf("\"%s\"", strings.Trim(etag, "\"")) } diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 3d5fb86eba..f6f6ac7a7e 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1187,7 +1187,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) * Id: &provider.ResourceId{OpaqueId: fmt.Sprintf("%d", eosFileInfo.Inode)}, Path: path, Owner: &userpb.UserId{OpaqueId: username}, - Etag: eosFileInfo.ETag, + Etag: fmt.Sprintf("\"%s\"", strings.Trim(eosFileInfo.ETag, "\"")), MimeType: mime.Detect(eosFileInfo.IsDir, path), Size: size, PermissionSet: &provider.ResourcePermissions{ListContainer: true, CreateContainer: true}, diff --git a/pkg/storage/utils/localfs/localfs_unix.go b/pkg/storage/utils/localfs/localfs_unix.go index 4ed33b83cb..3ec0889338 100644 --- a/pkg/storage/utils/localfs/localfs_unix.go +++ b/pkg/storage/utils/localfs/localfs_unix.go @@ -26,6 +26,7 @@ import ( "encoding/binary" "fmt" "os" + "strings" "syscall" "github.com/cs3org/reva/pkg/appctx" @@ -60,5 +61,6 @@ func calcEtag(ctx context.Context, fi os.FileInfo) string { if err != nil { log.Error().Err(err).Msg("error writing size") } - return fmt.Sprintf(`"%x"`, h.Sum(nil)) + etag := fmt.Sprintf(`"%x"`, h.Sum(nil)) + return fmt.Sprintf("\"%s\"", strings.Trim(etag, "\"")) } diff --git a/pkg/storage/utils/localfs/localfs_windows.go b/pkg/storage/utils/localfs/localfs_windows.go index fef8fa2e1f..1308d9390c 100644 --- a/pkg/storage/utils/localfs/localfs_windows.go +++ b/pkg/storage/utils/localfs/localfs_windows.go @@ -26,6 +26,7 @@ import ( "encoding/binary" "fmt" "os" + "strings" "github.com/cs3org/reva/pkg/appctx" ) @@ -48,5 +49,6 @@ func calcEtag(ctx context.Context, fi os.FileInfo) string { if err != nil { log.Error().Err(err).Msg("error writing size") } - return fmt.Sprintf(`"%x"`, h.Sum(nil)) + etag := fmt.Sprintf(`"%x"`, h.Sum(nil)) + return fmt.Sprintf("\"%s\"", strings.Trim(etag, "\"")) }