]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: Expand http_server_settings.request_limits to separate settings
authorMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 4 Dec 2023 11:37:07 +0000 (12:37 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
This simplifies the following changes.

src/lib-http/http-server-connection.c
src/lib-http/http-server.c
src/lib-http/http-server.h
src/lib-http/test-http-payload.c

index 09cd6b10fee4964ac49d41372d18a3f5b9f9f637..d97c06ff34f41bed361a3713b5e7b6bb74d9c1a2 100644 (file)
@@ -166,8 +166,15 @@ static void http_server_connection_ready(struct http_server_connection *conn)
                base_url.host.name = my_hostname;
        base_url.have_ssl = conn->ssl;
 
+       const struct http_request_limits limits = {
+               .max_target_length = set->request_max_target_length,
+               .max_payload_size = set->request_max_payload_size,
+               .header.max_size = set->request_hdr_max_size,
+               .header.max_field_size = set->request_hdr_max_field_size,
+               .header.max_fields = set->request_hdr_max_fields,
+       };
        conn->http_parser = http_request_parser_init(
-               conn->conn.input, &base_url, &conn->server->set.request_limits,
+               conn->conn.input, &base_url, &limits,
                HTTP_REQUEST_PARSE_FLAG_STRICT);
        o_stream_set_finish_via_child(conn->conn.output, FALSE);
        o_stream_set_flush_callback(conn->conn.output,
index 64b72d7b09a05945fbba0e738a9cc744f90a9e45..9edd32dc5228e00365eb25179a25d2d32510aab8 100644 (file)
@@ -47,7 +47,11 @@ struct http_server *http_server_init(const struct http_server_settings *set)
        server->set.max_client_idle_time_msecs = set->max_client_idle_time_msecs;
        server->set.max_pipelined_requests =
                (set->max_pipelined_requests > 0 ? set->max_pipelined_requests : 1);
-       server->set.request_limits = set->request_limits;
+       server->set.request_max_target_length = set->request_max_target_length;
+       server->set.request_max_payload_size = set->request_max_payload_size;
+       server->set.request_hdr_max_size = set->request_hdr_max_size;
+       server->set.request_hdr_max_field_size = set->request_hdr_max_field_size;
+       server->set.request_hdr_max_fields = set->request_hdr_max_fields;
        server->set.socket_send_buffer_size = set->socket_send_buffer_size;
        server->set.socket_recv_buffer_size = set->socket_recv_buffer_size;
        server->set.debug = set->debug;
index 9b4f710285049f29ea12d09782b9061aed209878..d4be2fa967d2f9b2462185a4fad40433dd0a6846 100644 (file)
@@ -35,7 +35,12 @@ struct http_server_settings {
        unsigned int max_pipelined_requests;
 
        /* Request limits */
-       struct http_request_limits request_limits;
+       uoff_t request_max_target_length;
+       uoff_t request_max_payload_size;
+       /* Request header limits */
+       uoff_t request_hdr_max_size;
+       uoff_t request_hdr_max_field_size;
+       unsigned int request_hdr_max_fields;
 
        /* The kernel send/receive buffer sizes used for the connection sockets.
           Configuring this is mainly useful for the test suite. The kernel
index 6101719cf7d5300147f0524e49719df098aa22a5..4b61b1baa9c4515d24062d6f545af2e92c5a38d5 100644 (file)
@@ -1763,7 +1763,7 @@ static void
 test_init_server_settings(struct http_server_settings *server_set_r)
 {
        i_zero(server_set_r);
-       server_set_r->request_limits.max_payload_size = UOFF_T_MAX;
+       server_set_r->request_max_payload_size = UOFF_T_MAX;
        server_set_r->debug = debug;
 
        if (small_socket_buffers) {