]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: Use io_stream_autocreate_ssl_server()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 16 Jun 2023 13:59:35 +0000 (16:59 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:09 +0000 (12:34 +0200)
src/lib-http/http-server-connection.c
src/lib-http/http-server-private.h
src/lib-http/http-server.c
src/lib-http/http-server.h

index c727f54030b31649f4531c153e580e7ce847da8e..09cd6b10fee4964ac49d41372d18a3f5b9f9f637 100644 (file)
@@ -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,
index c07d873e736cd83c92d314401dc78c20291139ac..881c5244a73ba0fafdf68c2f26c0ba00d0d6e341 100644 (file)
@@ -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
index ab6a4d0b320d34adc633e970a098ec2c11edf9f7..64b72d7b09a05945fbba0e738a9cc744f90a9e45 100644 (file)
@@ -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);
-}
index 6828f4616ea08be5a435a3d8c27a6c9cad517500..9b4f710285049f29ea12d09782b9061aed209878 100644 (file)
@@ -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