summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2022-12-28 17:33:56 +0100
committerPeter Wu <peter@lekensteyn.nl>2022-12-28 17:33:56 +0100
commitb703e972dc4c686a3f7780c6f6b4050f23d7417c (patch)
treeefcd6725700fec6f432707a2803eefd507c0a8b0
parentad0c238402d8da676f7f76ba9b4cd4669e6efee3 (diff)
downloadscripts-b703e972dc4c686a3f7780c6f6b4050f23d7417c.tar.gz
arch-proxy.py: accept upstream responses without Content-Length header
This can occur while manually querying directory indexes.
-rwxr-xr-xarch-proxy.py14
1 files changed, 11 insertions, 3 deletions
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)