From: Stephan Bosch Date: Sun, 17 Nov 2019 13:28:37 +0000 (+0100) Subject: lib-http: http-server-request - Provide default response for OPTIONS * request. X-Git-Tag: 2.3.11.2~324 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=48f3ec2a4bc88c5a74b586de46747d76fbdee49c;p=thirdparty%2Fdovecot%2Fcore.git lib-http: http-server-request - Provide default response for OPTIONS * request. --- diff --git a/src/lib-http/http-server-request.c b/src/lib-http/http-server-request.c index 65c669d857..0134541faf 100644 --- a/src/lib-http/http-server-request.c +++ b/src/lib-http/http-server-request.c @@ -279,6 +279,23 @@ http_server_request_connect_callback(struct http_server_request *req) req->req.target.url); } +static void +http_server_request_default_handler(struct http_server_request *req) +{ + const struct http_request *hreq = &req->req; + struct http_server_response *resp; + + if (strcmp(hreq->method, "OPTIONS") == 0 && + hreq->target.format == HTTP_REQUEST_TARGET_FORMAT_ASTERISK) { + resp = http_server_response_create(req, 200, "OK"); + http_server_response_submit(resp); + return; + } + + http_server_request_fail(req, 404, "Not Found"); + return; +} + void http_server_request_callback(struct http_server_request *req) { struct http_server_connection *conn = req->conn; @@ -290,7 +307,7 @@ void http_server_request_callback(struct http_server_request *req) } if (conn->callbacks->handle_request == NULL) { - http_server_request_fail(req, 404, "Not Found"); + http_server_request_default_handler(req); return; } conn->callbacks->handle_request(conn->context, req);