From b703e972dc4c686a3f7780c6f6b4050f23d7417c Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 28 Dec 2022 17:33:56 +0100 Subject: arch-proxy.py: accept upstream responses without Content-Length header This can occur while manually querying directory indexes. --- arch-proxy.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'arch-proxy.py') diff --git a/arch-proxy.py b/arch-proxy.py index 1ce6fa8..5a7b2c2 100755 --- a/arch-proxy.py +++ b/arch-proxy.py @@ -31,6 +31,9 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): if range_offset is None: code = 200 else: + if size is None: + raise BadRequest("Content-Length missing in upstream response" + " for range request") if range_offset >= size: # TODO need different status code raise BadRequest("416 Requested Range Not Satisfiable") @@ -41,7 +44,8 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): self.log_message('"%s" %d %s %s', self.requestline, code, size, "HIT" if upstream is None else "MISS:%s" % (upstream,)) self.send_response_only(code) - self.send_header('Content-Length', size) + if size is not None: + self.send_header('Content-Length', size) for k, v in headers.items(): self.send_header(k, v) self.end_headers() @@ -83,8 +87,12 @@ class RequestHandler(http.server.BaseHTTPRequestHandler): mtime_out[0] = mtime except ValueError: self.log_error("Unable to parse Last-Modified header") - self.send_ok(int(r.headers['Content-Length']), response_headers, - upstream=upstream, range_offset=range_offset) + if 'Content-Length' in r.headers: + self.send_ok(int(r.headers['Content-Length']), response_headers, + upstream=upstream, range_offset=range_offset) + else: + self.send_ok(None, response_headers, + upstream=upstream, range_offset=range_offset) if not head_only: yield from r.iter_content(4096) -- cgit v1.2.1