]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-doveadm, doveadm: Use io_stream_autocreate_ssl_client()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 16 Jun 2023 15:05:43 +0000 (18:05 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:09 +0000 (12:34 +0200)
This also removes doveadm_client_settings.{ssl_set|ssl_ctx}

src/doveadm/doveadm-compress.c
src/doveadm/doveadm-dsync.c
src/doveadm/doveadm-mail-server.c
src/lib-doveadm/doveadm-client.c
src/lib-doveadm/doveadm-client.h

index 197de0c5d4f7e254b1aff91478eae46e914cd30c..1044ca9bd9257cee6e16981b6f10de2268580c8b 100644 (file)
@@ -202,25 +202,14 @@ server_input_line_type(struct client *client, const char *line)
 
 static void client_init_ssl(struct client *client)
 {
-       struct ssl_iostream_context *ssl_ctx;
-       struct ssl_iostream_settings ssl_set;
        const char *error;
 
        io_remove(&client->io_server);
 
-       doveadm_get_ssl_settings(&ssl_set, pool_datastack_create());
-       ssl_set.verbose = doveadm_debug;
-
-       if (ssl_iostream_client_context_cache_get(&ssl_set, &ssl_ctx,
-                                                 &error) < 0)
-               i_fatal("Failed to initialize SSL context: %s", error);
-
-       if (io_stream_create_ssl_client(ssl_ctx, client->host, &ssl_set,
-                                       client->event,
-                                       &client->input, &client->output,
-                                       &client->ssl_iostream, &error) < 0)
+       if (io_stream_autocreate_ssl_client(client->event, client->host, 0,
+                                           &client->input, &client->output,
+                                           &client->ssl_iostream, &error) < 0)
                i_fatal("STARTTLS failed: %s", error);
-       ssl_iostream_context_unref(&ssl_ctx);
        client->io_server = io_add_istream(client->input, server_input, client);
 
        if (ssl_iostream_handshake(client->ssl_iostream) < 0) {
index 4425c48657ed5e15bc3f0efd5f5dfad32c7bbfb4..13ebb74762ca33a83fb7b45a2ac96550e3d53d89 100644 (file)
@@ -90,7 +90,6 @@ struct dsync_cmd_context {
        const char *err_prefix;
        struct failure_context failure_ctx;
 
-       struct ssl_iostream_context *ssl_ctx;
        struct ssl_iostream *ssl_iostream;
 
        enum dsync_run_type run_type;
@@ -811,8 +810,6 @@ cmd_dsync_run(struct doveadm_mail_cmd_context *_ctx, struct mail_user *user)
        if (ctx->run_type != DSYNC_RUN_TYPE_CMD)
                dsync_errors_finish(ctx);
        ssl_iostream_destroy(&ctx->ssl_iostream);
-       if (ctx->ssl_ctx != NULL)
-               ssl_iostream_context_unref(&ctx->ssl_ctx);
        if (ctx->input != NULL) {
                i_stream_set_max_buffer_size(ctx->input, ctx->input_orig_bufsize);
                i_stream_unref(&ctx->input);
@@ -900,7 +897,6 @@ static void dsync_server_run_command(struct dsync_cmd_context *ctx,
 
 static int
 dsync_connect_tcp(struct dsync_cmd_context *ctx,
-                 struct mail_storage_service_user *service_user,
                  const char *target, bool ssl, const char **error_r)
 {
        struct doveadm_client_settings conn_set;
@@ -923,18 +919,8 @@ dsync_connect_tcp(struct dsync_cmd_context *ctx,
                }
        }
 
-       if (ssl) {
-               if (mail_storage_service_user_init_ssl_client_settings(
-                               service_user, &conn_set.ssl_set, error_r) < 0)
-                       return -1;
-               if (ctx->ssl_ctx == NULL &&
-                   ssl_iostream_client_context_cache_get(conn_set.ssl_set,
-                                                         &ctx->ssl_ctx,
-                                                         error_r) < 0)
-                       return -1;
+       if (ssl)
                conn_set.ssl_flags = AUTH_PROXY_SSL_FLAG_YES;
-               conn_set.ssl_ctx = ctx->ssl_ctx;
-       }
        conn_set.username = ctx->ctx.set->doveadm_username;
        conn_set.password = ctx->ctx.set->doveadm_password;
        conn_set.log_passthrough = TRUE;
@@ -966,7 +952,6 @@ dsync_connect_tcp(struct dsync_cmd_context *ctx,
        io_loop_destroy(&ioloop);
 
        if (ctx->error != NULL) {
-               ssl_iostream_context_unref(&ctx->ssl_ctx);
                *error_r = ctx->error;
                ctx->error = NULL;
                return -1;
@@ -977,7 +962,6 @@ dsync_connect_tcp(struct dsync_cmd_context *ctx,
 
 static int
 parse_location(struct dsync_cmd_context *ctx,
-              struct mail_storage_service_user *service_user,
               const char *location,
               const char *const **remote_cmd_args_r, const char **error_r)
 {
@@ -985,13 +969,11 @@ parse_location(struct dsync_cmd_context *ctx,
 
        if (str_begins(location, "tcp:", &ctx->remote_name)) {
                /* TCP connection to remote dsync */
-               return dsync_connect_tcp(ctx, service_user, ctx->remote_name,
-                                        FALSE, error_r);
+               return dsync_connect_tcp(ctx, ctx->remote_name, FALSE, error_r);
        }
        if (str_begins(location, "tcps:", &ctx->remote_name)) {
                /* TCP+SSL connection to remote dsync */
-               return dsync_connect_tcp(ctx, service_user, ctx->remote_name,
-                                        TRUE, error_r);
+               return dsync_connect_tcp(ctx, ctx->remote_name, TRUE, error_r);
        }
 
        if (str_begins(location, "remote:", &ctx->remote_name)) {
@@ -1071,7 +1053,7 @@ static int cmd_dsync_prerun(struct doveadm_mail_cmd_context *_ctx,
        }
 
        if (remote_cmd_args == NULL && ctx->local_location != NULL) {
-               if (parse_location(ctx, service_user, ctx->local_location,
+               if (parse_location(ctx, ctx->local_location,
                                   &remote_cmd_args, error_r) < 0)
                        return -1;
        }
index 51a50313355d5ef382b2a89e6bc6413382240764..f6d2b6157646d724a0e1b9237d34f4dfada7eadb 100644 (file)
@@ -67,7 +67,6 @@ static void doveadm_cmd_callback(const struct doveadm_server_reply *reply,
 
 static void doveadm_server_request_free(struct doveadm_server_request *request)
 {
-       ssl_iostream_context_unref(&request->set.ssl_ctx);
        pool_unref(&request->pool);
 }
 
@@ -625,13 +624,10 @@ doveadm_mail_server_request_queue_handle_next(struct doveadm_mail_cmd_context *c
        request_copy = *request;
        array_pop_front(&doveadm_server_request_queue);
 
-       doveadm_get_ssl_settings(&request_copy.set.ssl_set);
        if (doveadm_client_create(&request_copy.set, &conn, error_r) < 0) {
-               settings_free(request_copy.set.ssl_set);
                internal_failure = TRUE;
                return -1;
        }
-       settings_free(request_copy.set.ssl_set);
        doveadm_mail_server_handle(request_copy.server, conn, cmd_ctx,
                                   request_copy.username,
                                   request_copy.print_username);
@@ -825,13 +821,10 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
        }
 
        if (doveadm_clients_count() <= limit) {
-               doveadm_get_ssl_settings(&conn_set.ssl_set);
                if (doveadm_client_create(&conn_set, &conn, error_r) < 0) {
-                       settings_free(conn_set.ssl_set);
                        internal_failure = TRUE;
                        return -1;
                } else {
-                       settings_free(conn_set.ssl_set);
                        doveadm_mail_server_handle(server, conn, ctx,
                                                   proxy_set.username,
                                                   print_username);
index a8e4d4311f2c12f74b8c4bdc6152cc0d67d24839..29e8f38b4ad77978f23f0a5f42c38bc9b405bbc5 100644 (file)
@@ -92,15 +92,7 @@ void doveadm_client_settings_dup(const struct doveadm_client_settings *src,
 
        dest_r->username = p_strdup(pool, src->username);
        dest_r->password = p_strdup(pool, src->password);
-
        dest_r->ssl_flags = src->ssl_flags;
-       dest_r->ssl_set = src->ssl_set;
-       pool_add_external_ref(pool, src->ssl_set->pool);
-       if (src->ssl_ctx != NULL) {
-               dest_r->ssl_ctx = src->ssl_ctx;
-               ssl_iostream_context_ref(dest_r->ssl_ctx);
-       }
-
        dest_r->log_passthrough = src->log_passthrough;
 }
 
@@ -560,25 +552,20 @@ static bool doveadm_client_input_one(struct doveadm_client *conn)
 static int doveadm_client_init_ssl(struct doveadm_client *conn,
                                   const char **error_r)
 {
-       struct ssl_iostream_settings ssl_set = *conn->set.ssl_set;
+       enum ssl_iostream_flags ssl_flags = 0;
        const char *error;
 
        if (conn->set.ssl_flags == 0)
                return 0;
 
        if ((conn->set.ssl_flags & AUTH_PROXY_SSL_FLAG_ANY_CERT) != 0)
-               ssl_set.allow_invalid_cert = TRUE;
-
-       if (conn->set.ssl_ctx == NULL &&
-           ssl_iostream_client_context_cache_get(&ssl_set, &conn->set.ssl_ctx,
-                                                 error_r) < 0)
-               return -1;
+               ssl_flags |= SSL_IOSTREAM_FLAG_ALLOW_INVALID_CERT;
 
        const char *hostname =
                conn->set.hostname != NULL ? conn->set.hostname : "";
        connection_input_halt(&conn->conn);
-       if (io_stream_create_ssl_client(conn->set.ssl_ctx, hostname,
-                                       conn->conn.event, 0,
+       if (io_stream_autocreate_ssl_client(conn->conn.event, hostname,
+                                       ssl_flags,
                                        &conn->conn.input, &conn->conn.output,
                                        &conn->ssl_iostream, &error) < 0) {
                *error_r = t_strdup_printf(
@@ -861,7 +848,6 @@ static void doveadm_client_destroy_int(struct doveadm_client *conn)
        timeout_remove(&conn->to_destroy);
 
        connection_deinit(&conn->conn);
-       ssl_iostream_context_unref(&conn->set.ssl_ctx);
 }
 
 static void doveadm_client_destroy(struct doveadm_client **_conn)
index fd2e4f518600744430a4f5f5c4585bf68e2f47e2..7c9ba98f9383a4ea2c14a8f7bbc91548c0af01aa 100644 (file)
@@ -46,10 +46,6 @@ struct doveadm_client_settings {
 
        /* SSL flags. */
        enum auth_proxy_ssl_flags ssl_flags;
-       /* SSL settings. */
-       const struct ssl_iostream_settings *ssl_set;
-       /* SSL context, or NULL to create a new one. */
-       struct ssl_iostream_context *ssl_ctx;
 
        /* Enable receiving logs from the server */
        bool log_passthrough;