smattymatty
663fc5ae48
fix(s3): allow UTF-8 in PostObject form field values ( fix #1489 ) ( #1492 )
...
PostObject (presigned POST) returns `400 InvalidHeaderValue` when the upload involves a non-ASCII filename. The same key uploads fine vie PUT, as the issue #1489 noted.
The problem was that `handle_post_object` stores the form field values in an `http::HeaderMap`. values go in through `HeaderValue::from_str` but are read back with the strict `HeaderValue::to_str()` (ASCII-only) which fails on any UTF-8 value.
This is the same problem fixed in eab2b81b for `x-amz-meta-*` headers, and the fix is the same:
`std::str::from_utf8(value.as_bytes())` instead of `to_str()`. The `key` field in `post_object.rs` and the standard headers (`content-disposition` etc.) in `extract_metadata_headers`.
Added integration tests for PostObject (there were none): UTF-8 key, `${filename}` substitution, and UTF-8 `Content-Disposition` metadata. The substitution test passes even without the fix, proving that the filename path was never broken, only the form-params round-trip.
Co-authored-by: Mathew Storm <mathew@stormdevelopments.ca >
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/1492
Reviewed-by: trinity-1686a <trinity-1686a@noreply.localhost >
2026-07-20 18:12:39 +00:00
trinity-1686a
60244b60dd
don't panic on missing checksum ( fix #1387 ) ( #1389 )
...
fix https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/1387
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/1389
Reviewed-by: Alex <lx@deuxfleurs.fr >
Co-authored-by: trinity-1686a <trinity-1686a@noreply.localhost >
Co-committed-by: trinity-1686a <trinity-1686a@noreply.localhost >
2026-03-17 18:16:37 +00:00
Gwen Lg
f59a8b7f62
style: corrects the use of ';' to improve readability
...
- remove unnecessary semicolon
and enable lint warning: unnecessary semicolon
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#unnecessary_semicolon
- add `;` to the last statement for consitent formatting
and enable lint `clippy::semicolon_if_nothing_returned`
warning: consider adding a `;` to the last statement for consistent formatting
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#semicolon_if_nothing_returned
2026-02-17 18:38:44 +00:00
Gwen Lg
b0ee7dd3c9
chore: localy disable some lints
...
- clippy::nonminimal_bool disabled for check_size_filter function
clippy message: this boolean expression can be simplified
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#nonminimal_bool
- clippy::large_enum_variant for `DecryptStreamState` and `State`
- clippy::too_many_arguments for `put_block_and_meta` and
`test_read_encrypted`
- clippy::deref_addrof for specific unsafe code
- clippy::doc_overindented_list_items and clippy::doc_lazy_continuation
2026-01-29 20:49:28 +01:00
Gwen Lg
8772db8228
refactor: rename method to avoid confusion
...
- rename SqliteDb::new to `_::open` as it's not return Self
lint message: methods called `new` usually return `Self`
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#new_ret_no_self
- rename method `add` to `add_calgorithm`
The semantics of this has nothing to do with an `add` operation in the sense of the `Add` trait.
And method `add` can be confused for the standard trait method std::ops::Add::add
lint https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#should_implement_trait
2026-01-29 20:49:28 +01:00
Gwen Lg
ea9597819c
refactor: clean perf related
...
- use array instead of vec when it's useless
clippy lint message: useless use of `vec!` help: you can use an array directly.
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#useless_vec
- call as_bytes before slicing
lint message: calling `as_bytes` after slicing a string
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#sliced_string_as_bytes
Signed-off-by: Gwen Lg <me@gwenlg.fr >
2026-01-29 20:49:28 +01:00
Gwen Lg
141b3f24f1
chore: clean relative to references and borrows
...
- lint message: the borrowed expression implements the required traits
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#needless_borrows_for_generic_args
- lint message: this expression creates a reference which is immediately dereferenced by the compiler
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#needless_borrow
- lint message: you don't need to add `&` to all patterns
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#match_ref_pat
- remove useless taken reference
lint message: needlessly taken reference of left operand
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#op_ref
- use &Path instead of &PathBuf as fn parameters
lint message: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do
help: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.92.0/index.html#ptr_arg
2026-01-29 20:49:28 +01:00
Alex Auvolat
cd641a9ed2
Merge branch 'main-v1' into merge-v1
2026-01-24 09:56:02 +01:00
perrynzhou@gmail.com
e3a5ec6ef6
rename put_blocks_max_parallel to block_max_concurrent_writes_per_request and update configuration.md
2025-12-12 07:09:38 +08:00
perrynzhou@gmail.com
4d124e1c76
Add the parameter, which replaces . This is to accommodate different storage media such as HDD and NVMe.
2025-12-10 06:43:51 +08:00
Alex Auvolat
fbb40c4ea0
object_table: merge checksum_algorithm and checksum_type for Uploading state
2025-05-22 17:07:10 +02:00
Alex Auvolat
768794daae
api: change ExpectedChecksums to not be a reference
2025-05-22 17:03:54 +02:00
Alex Auvolat
abe0546ab0
model: store x-amz-checksum-type (full_object | composite)
2025-05-22 17:03:54 +02:00
Alex Auvolat
cfd259190f
sse-c: use different object encryption key for each object
2025-03-18 16:23:37 +01:00
Alex Auvolat
bf27a3ec98
web: implement x-amz-website-redirect-location
2025-02-19 17:04:10 +01:00
Alex Auvolat
cfe8e8d45c
api: PutObject: save trailer checksum in metadata
2025-02-18 21:56:32 +01:00
Alex Auvolat
f6e805e7db
api: various fixes
2025-02-18 21:47:53 +01:00
Alex Auvolat
21c0dda16a
api: refactor: move checksumming code around again
2025-02-17 20:11:06 +01:00
Alex Auvolat
658541d812
api: use checksumming in api_common::signature for put/putpart
2025-02-17 19:54:25 +01:00
Alex Auvolat
c5df820e2c
api: start refactor of signature to calculate checksums earlier
2025-02-17 18:47:06 +01:00
Alex Auvolat
cee7560fc1
api: refactor: move checksum algorithms to common
2025-02-16 17:25:55 +01:00
Alex Auvolat
84f1db91c4
fix things up
2025-01-31 18:34:57 +01:00
Alex Auvolat
9fa20d45be
wip: split garage_api into garage_api_{common,s3,k2v,admin}
2025-01-31 18:18:29 +01:00
Alex Auvolat
e8fa89e834
s3 api: make x-amz-meta-* headers lowercase ( fix #844 )
2025-01-27 19:58:06 +01:00
Alex Auvolat
74949c69cb
[s3-checksum] implement x-amz-checksum-* headers
2024-03-26 15:01:34 +01:00
Alex Auvolat
3fcb54e3cf
[sse-c] Remove special case for Content-Type header
2024-03-07 15:43:48 +01:00
Alex Auvolat
57acc60082
[sse-c] Implement SSE-C encryption
2024-03-07 15:43:47 +01:00
Alex Auvolat
fe2dc5d51c
Merge branch 'main' into next-0.10
2024-03-07 14:00:34 +01:00
Alex Auvolat
eab2b81be2
[unicode-headers] allow utf-8 in headers + add test for object metadata
2024-03-07 13:42:01 +01:00
Alex Auvolat
bbde9bc912
Merge branch 'main' into next-0.10
2024-03-04 15:56:10 +01:00
Yureka
fb55682c66
add request context helper
2024-03-04 13:26:39 +01:00
Alex Auvolat
4b978b7533
Merge branch 'main' into next-0.10
2024-02-26 18:55:24 +01:00
Alex Auvolat
b76c0c102e
[refactor-put] add ordering tag to blocks being sent to storage nodes
2024-02-26 18:35:11 +01:00
Alex Auvolat
babccd2ad3
[refactor-put] send several blocks in parallel to storage nodes
2024-02-26 18:22:37 +01:00
Alex Auvolat
3fe94cc14f
[refactor-put] rewrite read_and_put_block as a series of steps with channels
2024-02-26 17:55:37 +01:00
Alex Auvolat
eb4a6ce106
Merge branch 'main' into next-0.10
2024-02-15 14:06:34 +01:00
Alex Auvolat
5ea24254a9
[import-netapp] import Netapp code into Garage codebase
2024-02-15 12:15:07 +01:00
Alex Auvolat
cf2af186fc
Merge branch 'main' into next-0.10
2024-02-13 11:36:28 +01:00
Alex Auvolat
ad5ce968d2
[dep-upgrade-202402] remove useless mut
2024-02-08 23:29:57 +01:00
Alex Auvolat
e011941964
[dep-upgrade-202402] refactor use of BodyStream
2024-02-07 15:32:51 +01:00
Alex Auvolat
0bb5b77530
[dep-upgrade-202402] wip: port to http/hyper crates v1
2024-02-05 18:49:54 +01:00
Alex Auvolat
4a9c94514f
avoid using layout_watch in System directly
2023-11-08 16:41:00 +01:00
Alex Auvolat
12d1dbfc6b
remove Ring and use ClusterLayout everywhere
2023-11-08 15:41:24 +01:00
Alex Auvolat
c82d91c6bc
DeleteObject: always insert a deletion marker with a bigger timestamp than everything before
2023-10-20 13:56:35 +02:00
Alex Auvolat
8686cfd0b1
s3 api: also ensure increasing timestamps for create_multipart_upload
2023-10-20 13:37:37 +02:00
Alex Auvolat
c6cde1f143
remove now-unused key parameter in check_quotas
2023-10-20 13:20:47 +02:00
Alex Auvolat
3d6ed63824
check_quotas: avoid re-fetching object from object table
2023-10-18 16:36:48 +02:00
Alex Auvolat
45b0453d0f
Ensure increasing version timestamps in PutObject
2023-10-18 16:31:50 +02:00
Alex Auvolat
a6cc563bdd
UploadPart: automatic cleanup of version (and reference blocked) when interrupted
2023-06-09 16:23:37 +02:00
Alex Auvolat
82e75c0e29
Adapt S3 API code to use new multipart upload models
...
- Create and PutPart
- completemultipartupload
- upload part copy
- list_parts
2023-06-09 16:23:37 +02:00