diff --git a/config b/config index ee28711..4228a5e 100644 --- a/config +++ b/config @@ -24,6 +24,9 @@ # File storing the PID in daemon mode #pid = +# Max size of request body (bytes) +#max_content_length = 10000000 + # Socket timeout (seconds) #timeout = 10 diff --git a/radicale/__init__.py b/radicale/__init__.py index ba1994d..b1cdc52 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -301,6 +301,12 @@ class Application: # Get content content_length = int(environ.get("CONTENT_LENGTH") or 0) if content_length: + max_content_length = self.configuration.getint( + "server", "max_content_length") + if max_content_length and content_length > max_content_length: + self.logger.debug( + "Request body too large: %d", content_length) + return response(client.REQUEST_ENTITY_TOO_LARGE) try: content = self.decode( environ["wsgi.input"].read(content_length), environ) diff --git a/radicale/config.py b/radicale/config.py index 7ec3d11..c639211 100644 --- a/radicale/config.py +++ b/radicale/config.py @@ -34,6 +34,7 @@ INITIAL_CONFIG = { "hosts": "0.0.0.0:5232", "daemon": "False", "pid": "", + "max_content_length": "10000000", "timeout": "10", "ssl": "False", "certificate": "/etc/apache2/ssl/server.crt",