[pve-devel] [RFC PATCH installer] auto: allow a binary executable as the first boot executable
Christoph Heiss
c.heiss at proxmox.com
Mon Dec 9 10:57:34 CET 2024
Apart from one note inline, LGTM overall.
On Fri, Dec 06, 2024 at 02:24:55PM +0100, Daniel Kral wrote:
> [..]
> When the HTTP response is missing the "Content-Length" header, it will
> be explicitly stated in the error message.
Why mandate the `Content-Length` header tho? For HTTP/1.1, it is only
marked SHOULD [0] and for HTTP2, it is actually completely optional [1].
I've just tested it w/ and w/o the patch, both work just fine if no
`Content-Length` header is sent back.
(Admittedly, only with a plain-text script - but that is the more likely
usage anyway.)
[0] https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2
[1] https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.6
> [..]
> diff --git a/proxmox-installer-common/src/http.rs b/proxmox-installer-common/src/http.rs
> index f4afe14..a748266 100644
> --- a/proxmox-installer-common/src/http.rs
> +++ b/proxmox-installer-common/src/http.rs
> [..]
> +pub fn get_as_bytes(url: &str, fingerprint: Option<&str>, max_size: usize) -> Result<Vec<u8>> {
> + let mut result: Vec<u8> = Vec::new();
> +
> + let response = build_agent(fingerprint)?
> .get(url)
> .timeout(std::time::Duration::from_secs(60))
> - .call()?
> - .into_string()?)
> + .call()?;
> +
> + match response
> + .into_reader()
> + .take(max_size as u64)
> + .read_to_end(&mut result)
> + {
> + Err(ref err) if err.kind() == std::io::ErrorKind::UnexpectedEof => {
> + bail!("Unexpected end of line. Does the HTTP server provide a Content-Length header?")
> + }
Since the `Content-Length` header isn't actually required, the message
is misleading.
I wouldn't handle `UnexpectedEof` special here, instead just like any
other error - since it does not really indicate anything specific.
> + Err(err) => bail!("Error while reading GET request: {err}"),
> + Ok(_) => Ok(result),
> + }
> }
>
More information about the pve-devel
mailing list