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) {
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;
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);
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;
}
}
- 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;
io_loop_destroy(&ioloop);
if (ctx->error != NULL) {
- ssl_iostream_context_unref(&ctx->ssl_ctx);
*error_r = ctx->error;
ctx->error = NULL;
return -1;
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)
{
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)) {
}
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;
}
static void doveadm_server_request_free(struct doveadm_server_request *request)
{
- ssl_iostream_context_unref(&request->set.ssl_ctx);
pool_unref(&request->pool);
}
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);
}
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);
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;
}
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(
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)
/* 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;