aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2021-02-19 23:40:18 +0100
committerAlex Auvolat <alex@adnab.me>2021-02-19 23:40:18 +0100
commit1de96248e0e4aae27995eb08e9019842b327d1a3 (patch)
tree45c3c19a6bcccc7fb8b8674f23e2b4d4301b1e58
parent0ddfee92c5f1787d452a04ea0b7620bdf95df761 (diff)
downloadgarage-1de96248e0e4aae27995eb08e9019842b327d1a3.tar.gz
garage-1de96248e0e4aae27995eb08e9019842b327d1a3.zip
add application/xml header and missing xml escapes
-rw-r--r--src/api/s3_copy.rs4
-rw-r--r--src/api/s3_delete.rs8
-rw-r--r--src/api/s3_list.rs4
3 files changed, 11 insertions, 5 deletions
diff --git a/src/api/s3_copy.rs b/src/api/s3_copy.rs
index 5997e4fe..d764f7a8 100644
--- a/src/api/s3_copy.rs
+++ b/src/api/s3_copy.rs
@@ -103,5 +103,7 @@ pub async fn handle_copy(
writeln!(&mut xml, "\t<LastModified>{}</LastModified>", last_modified).unwrap();
writeln!(&mut xml, "</CopyObjectResult>").unwrap();
- Ok(Response::new(Body::from(xml.into_bytes())))
+ Ok(Response::builder()
+ .header("Content-Type", "application/xml")
+ .body(Body::from(xml.into_bytes()))?)
}
diff --git a/src/api/s3_delete.rs b/src/api/s3_delete.rs
index f46bfcfe..b019987b 100644
--- a/src/api/s3_delete.rs
+++ b/src/api/s3_delete.rs
@@ -86,7 +86,7 @@ pub async fn handle_delete_objects(
match handle_delete_internal(&garage, bucket, &obj.key).await {
Ok((deleted_version, delete_marker_version)) => {
writeln!(&mut retxml, "\t<Deleted>").unwrap();
- writeln!(&mut retxml, "\t\t<Key>{}</Key>", obj.key).unwrap();
+ writeln!(&mut retxml, "\t\t<Key>{}</Key>", xml_escape(&obj.key)).unwrap();
writeln!(
&mut retxml,
"\t\t<VersionId>{}</VersionId>",
@@ -104,7 +104,7 @@ pub async fn handle_delete_objects(
Err(e) => {
writeln!(&mut retxml, "\t<Error>").unwrap();
writeln!(&mut retxml, "\t\t<Code>{}</Code>", e.http_status_code()).unwrap();
- writeln!(&mut retxml, "\t\t<Key>{}</Key>", obj.key).unwrap();
+ writeln!(&mut retxml, "\t\t<Key>{}</Key>", xml_escape(&obj.key)).unwrap();
writeln!(
&mut retxml,
"\t\t<Message>{}</Message>",
@@ -118,7 +118,9 @@ pub async fn handle_delete_objects(
writeln!(&mut retxml, "</DeleteObjectsOutput>").unwrap();
- Ok(Response::new(Body::from(retxml.into_bytes())))
+ Ok(Response::builder()
+ .header("Content-Type", "application/xml")
+ .body(Body::from(retxml.into_bytes()))?)
}
struct DeleteRequest {
diff --git a/src/api/s3_list.rs b/src/api/s3_list.rs
index 39ede3e2..2be47091 100644
--- a/src/api/s3_list.rs
+++ b/src/api/s3_list.rs
@@ -271,5 +271,7 @@ pub async fn handle_list(
writeln!(&mut xml, "</ListBucketResult>").unwrap();
debug!("{}", xml);
- Ok(Response::new(Body::from(xml.into_bytes())))
+ Ok(Response::builder()
+ .header("Content-Type", "application/xml")
+ .body(Body::from(xml.into_bytes()))?)
}