From: Timo Sirainen Date: Fri, 16 Jun 2023 13:59:35 +0000 (+0300) Subject: lib-http: Use io_stream_autocreate_ssl_server() X-Git-Tag: 2.4.1~1484 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f83f1aed7f3333f9affa82b05d60bb735a72d76f;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Use io_stream_autocreate_ssl_server() --- diff --git a/src/lib-http/http-server-connection.c b/src/lib-http/http-server-connection.c index c727f54030..09cd6b10fe 100644 --- a/src/lib-http/http-server-connection.c +++ b/src/lib-http/http-server-connection.c @@ -354,28 +354,29 @@ static int http_server_connection_ssl_init(struct http_server_connection *conn) { struct http_server *server = conn->server; + struct ssl_iostream_context *ssl_ctx; const char *error; int ret; - if (http_server_init_ssl_ctx(server, &error) < 0) { - e_error(conn->event, "Couldn't initialize SSL: %s", error); - return -1; - } - e_debug(conn->event, "Starting SSL handshake"); http_server_connection_input_halt(conn); - if (server->ssl_ctx == NULL) { - ret = master_service_ssl_init(master_service, - &conn->conn.input, - &conn->conn.output, - &conn->ssl_iostream, &error); - } else { - ret = io_stream_create_ssl_server(server->ssl_ctx, + if (server->set.ssl == NULL) { + ret = io_stream_autocreate_ssl_server(server->event, + &conn->conn.input, + &conn->conn.output, + &conn->ssl_iostream, + &error); + } else if (ssl_iostream_server_context_cache_get(server->set.ssl, + &ssl_ctx, &error) < 0) + ret = -1; + else { + ret = io_stream_create_ssl_server(ssl_ctx, server->event, &conn->conn.input, &conn->conn.output, &conn->ssl_iostream, &error); + ssl_iostream_context_unref(&ssl_ctx); } if (ret < 0) { e_error(conn->event, diff --git a/src/lib-http/http-server-private.h b/src/lib-http/http-server-private.h index c07d873e73..881c5244a7 100644 --- a/src/lib-http/http-server-private.h +++ b/src/lib-http/http-server-private.h @@ -185,7 +185,6 @@ struct http_server { struct ioloop *ioloop; struct event *event; - struct ssl_iostream_context *ssl_ctx; struct connection_list *conn_list; @@ -348,10 +347,4 @@ int http_server_resource_find(struct http_server *server, const char *path, bool http_server_resource_callback(struct http_server_request *req); -/* - * Server - */ - -int http_server_init_ssl_ctx(struct http_server *server, const char **error_r); - #endif diff --git a/src/lib-http/http-server.c b/src/lib-http/http-server.c index ab6a4d0b32..64b72d7b09 100644 --- a/src/lib-http/http-server.c +++ b/src/lib-http/http-server.c @@ -79,8 +79,6 @@ void http_server_deinit(struct http_server **_server) i_assert(array_count(&server->locations) == 0); settings_free(server->set.ssl); - if (server->ssl_ctx != NULL) - ssl_iostream_context_unref(&server->ssl_ctx); event_unref(&server->event); pool_unref(&server->pool); } @@ -116,12 +114,3 @@ void http_server_shut_down(struct http_server *server) (void)http_server_connection_shut_down(conn); } } - -int http_server_init_ssl_ctx(struct http_server *server, const char **error_r) -{ - if (server->set.ssl == NULL || server->ssl_ctx != NULL) - return 0; - - return ssl_iostream_server_context_cache_get(server->set.ssl, - &server->ssl_ctx, error_r); -} diff --git a/src/lib-http/http-server.h b/src/lib-http/http-server.h index 6828f4616e..9b4f710285 100644 --- a/src/lib-http/http-server.h +++ b/src/lib-http/http-server.h @@ -24,7 +24,7 @@ struct http_server_settings { const char *rawlog_dir; - /* SSL settings; if NULL, master_service_ssl_init() is used instead */ + /* SSL settings; if NULL, settings_get() is used automatically */ const struct ssl_iostream_settings *ssl; /* The maximum time in milliseconds a client is allowed to be idle