From: Timo Sirainen Date: Fri, 16 Jun 2023 15:05:43 +0000 (+0300) Subject: lib-doveadm, doveadm: Use io_stream_autocreate_ssl_client() X-Git-Tag: 2.4.1~1476 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c73df97e43501ed7d5562fb09313a1ec8fe72558;p=thirdparty%2Fdovecot%2Fcore.git lib-doveadm, doveadm: Use io_stream_autocreate_ssl_client() This also removes doveadm_client_settings.{ssl_set|ssl_ctx} --- diff --git a/src/doveadm/doveadm-compress.c b/src/doveadm/doveadm-compress.c index 197de0c5d4..1044ca9bd9 100644 --- a/src/doveadm/doveadm-compress.c +++ b/src/doveadm/doveadm-compress.c @@ -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) { diff --git a/src/doveadm/doveadm-dsync.c b/src/doveadm/doveadm-dsync.c index 4425c48657..13ebb74762 100644 --- a/src/doveadm/doveadm-dsync.c +++ b/src/doveadm/doveadm-dsync.c @@ -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; } diff --git a/src/doveadm/doveadm-mail-server.c b/src/doveadm/doveadm-mail-server.c index 51a5031335..f6d2b61576 100644 --- a/src/doveadm/doveadm-mail-server.c +++ b/src/doveadm/doveadm-mail-server.c @@ -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); diff --git a/src/lib-doveadm/doveadm-client.c b/src/lib-doveadm/doveadm-client.c index a8e4d4311f..29e8f38b4a 100644 --- a/src/lib-doveadm/doveadm-client.c +++ b/src/lib-doveadm/doveadm-client.c @@ -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) diff --git a/src/lib-doveadm/doveadm-client.h b/src/lib-doveadm/doveadm-client.h index fd2e4f5186..7c9ba98f93 100644 --- a/src/lib-doveadm/doveadm-client.h +++ b/src/lib-doveadm/doveadm-client.h @@ -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;