diff --git a/src/api/api_server.rs b/src/api/api_server.rs index 6ba5e532..af331a39 100644 --- a/src/api/api_server.rs +++ b/src/api/api_server.rs @@ -226,13 +226,7 @@ async fn handler_inner( } fn parse_bucket_key(path: &str) -> Result<(&str, Option<&str>), Error> { - if !path.starts_with('/') { - return Err(Error::BadRequest(format!( - "Invalid path: {}, should start with a /", - path - ))); - } - let path = &path[1..]; + let path = path.trim_start_matches('/'); match path.find('/') { Some(i) => Ok((&path[..i], Some(&path[i + 1..]))), diff --git a/src/api/s3_list.rs b/src/api/s3_list.rs index 88f76771..ffde609f 100644 --- a/src/api/s3_list.rs +++ b/src/api/s3_list.rs @@ -103,7 +103,8 @@ pub async fn handle_list( writeln!( &mut xml, "\t\t{}", - xml_encode_key(key, urlencode_resp) + xml_escape(key), + //xml_encode_key(key, urlencode_resp) // doesn't work with nextcloud, wtf ) .unwrap(); writeln!(&mut xml, "\t\t{}", last_modif).unwrap(); @@ -117,7 +118,8 @@ pub async fn handle_list( writeln!( &mut xml, "\t{}", - xml_encode_key(pfx, urlencode_resp) + xml_escape(pfx), + //xml_encode_key(pfx, urlencode_resp) ) .unwrap(); }