]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, global: Split master_service_ssl_settings_to_iostream_set() to client...
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 29 Jul 2021 18:43:03 +0000 (21:43 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 9 Aug 2021 15:51:22 +0000 (15:51 +0000)
src/auth/auth-policy.c
src/doveadm/doveadm-settings.c
src/lib-master/master-service-ssl-settings.c
src/lib-master/master-service-ssl-settings.h
src/lmtp/lmtp-proxy.c
src/login-common/client-common.c
src/login-common/login-proxy.c
src/login-common/main.c
src/stats/event-exporter-transport-http-post.c

index bd4300ad8502cc5b6b96ed7bec0ab415f9932462..951f85e6f809b40c55387628297a41bffaa44bd8 100644 (file)
@@ -170,9 +170,8 @@ void auth_policy_init(void)
        if (global_auth_settings->debug)
                http_client_set.debug = 1;
 
-       master_service_ssl_settings_to_iostream_set(master_ssl_set, pool_datastack_create(),
-                                                   MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT,
-                                                   &ssl_set);
+       master_service_ssl_client_settings_to_iostream_set(master_ssl_set,
+               pool_datastack_create(), &ssl_set);
        http_client_set.ssl = &ssl_set;
        http_client_set.event_parent = auth_event;
        http_client = http_client_init(&http_client_set);
index c363dce9b50d435ea5a86568673098bf3034dedb..2c13bf0cf14a8a2301bdd8f0bd1d7cea98a9eb0d 100644 (file)
@@ -213,9 +213,8 @@ const struct master_service_ssl_settings *doveadm_ssl_set = NULL;
 void doveadm_get_ssl_settings(struct ssl_iostream_settings *set_r, pool_t pool)
 {
        i_zero(set_r);
-       master_service_ssl_settings_to_iostream_set(doveadm_ssl_set, pool,
-                                                   MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT,
-                                                   set_r);
+       master_service_ssl_client_settings_to_iostream_set(doveadm_ssl_set,
+                                                          pool, set_r);
 }
 
 void doveadm_settings_expand(struct doveadm_settings *set, pool_t pool)
index 5dc4a460e51862a208ec00fd6025698df874bd24..9d1f5dda477b3dd9742886a665688a42c46edb83 100644 (file)
@@ -171,9 +171,8 @@ master_service_ssl_settings_get(struct master_service *service)
        return sets[1];
 }
 
-void master_service_ssl_settings_to_iostream_set(
+static void master_service_ssl_common_settings_to_iostream_set(
        const struct master_service_ssl_settings *ssl_set, pool_t pool,
-       enum master_service_ssl_settings_type type,
        struct ssl_iostream_settings *set_r)
 {
        i_zero(set_r);
@@ -185,29 +184,6 @@ void master_service_ssl_settings_to_iostream_set(
           clients. But at least for now it's needed for login-proxy. */
        set_r->ca = p_strdup_empty(pool, ssl_set->ssl_ca);
 
-       switch (type) {
-       case MASTER_SERVICE_SSL_SETTINGS_TYPE_SERVER:
-               set_r->cert.cert = p_strdup(pool, ssl_set->ssl_cert);
-               set_r->cert.key = p_strdup(pool, ssl_set->ssl_key);
-               set_r->cert.key_password = p_strdup(pool, ssl_set->ssl_key_password);
-               if (ssl_set->ssl_alt_cert != NULL && *ssl_set->ssl_alt_cert != '\0') {
-                       set_r->alt_cert.cert = p_strdup(pool, ssl_set->ssl_alt_cert);
-                       set_r->alt_cert.key = p_strdup(pool, ssl_set->ssl_alt_key);
-                       set_r->alt_cert.key_password = p_strdup(pool, ssl_set->ssl_key_password);
-               }
-               set_r->verify_remote_cert = ssl_set->ssl_verify_client_cert;
-               set_r->allow_invalid_cert = !set_r->verify_remote_cert;
-               break;
-       case MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT:
-               set_r->ca_file = p_strdup_empty(pool, ssl_set->ssl_client_ca_file);
-               set_r->ca_dir = p_strdup_empty(pool, ssl_set->ssl_client_ca_dir);
-               set_r->cert.cert = p_strdup_empty(pool, ssl_set->ssl_client_cert);
-               set_r->cert.key = p_strdup_empty(pool, ssl_set->ssl_client_key);
-               set_r->verify_remote_cert = ssl_set->ssl_client_require_valid_cert;
-               set_r->allow_invalid_cert = !set_r->verify_remote_cert;
-               break;
-       }
-
        set_r->dh = p_strdup(pool, ssl_set->ssl_dh);
        set_r->crypto_device = p_strdup(pool, ssl_set->ssl_crypto_device);
        set_r->cert_username_field = p_strdup(pool, ssl_set->ssl_cert_username_field);
@@ -220,3 +196,36 @@ void master_service_ssl_settings_to_iostream_set(
        set_r->tickets = ssl_set->parsed_opts.tickets;
        set_r->curve_list = p_strdup(pool, ssl_set->ssl_curve_list);
 }
+
+void master_service_ssl_client_settings_to_iostream_set(
+       const struct master_service_ssl_settings *ssl_set, pool_t pool,
+       struct ssl_iostream_settings *set_r)
+{
+       master_service_ssl_common_settings_to_iostream_set(ssl_set, pool, set_r);
+
+       set_r->ca_file = p_strdup_empty(pool, ssl_set->ssl_client_ca_file);
+       set_r->ca_dir = p_strdup_empty(pool, ssl_set->ssl_client_ca_dir);
+       set_r->cert.cert = p_strdup_empty(pool, ssl_set->ssl_client_cert);
+       set_r->cert.key = p_strdup_empty(pool, ssl_set->ssl_client_key);
+       set_r->verify_remote_cert = ssl_set->ssl_client_require_valid_cert;
+       set_r->allow_invalid_cert = !set_r->verify_remote_cert;
+}
+
+void master_service_ssl_server_settings_to_iostream_set(
+       const struct master_service_ssl_settings *ssl_set,
+       pool_t pool, struct ssl_iostream_settings *set_r)
+{
+       master_service_ssl_common_settings_to_iostream_set(ssl_set, pool, set_r);
+
+       set_r->cert.cert = p_strdup(pool, ssl_set->ssl_cert);
+       set_r->cert.key = p_strdup(pool, ssl_set->ssl_key);
+       set_r->cert.key_password = p_strdup(pool, ssl_set->ssl_key_password);
+       if (ssl_set->ssl_alt_cert != NULL &&
+           *ssl_set->ssl_alt_cert != '\0') {
+               set_r->alt_cert.cert = p_strdup(pool, ssl_set->ssl_alt_cert);
+               set_r->alt_cert.key = p_strdup(pool, ssl_set->ssl_alt_key);
+               set_r->alt_cert.key_password = p_strdup(pool, ssl_set->ssl_key_password);
+       }
+       set_r->verify_remote_cert = ssl_set->ssl_verify_client_cert;
+       set_r->allow_invalid_cert = !set_r->verify_remote_cert;
+}
index ec79c1f1d3171c09f97d2e07971748db16ecdf92..523f7b6b584251d296110c41b4062c61bca18877 100644 (file)
@@ -38,20 +38,17 @@ struct master_service_ssl_settings {
        } parsed_opts;
 };
 
-enum master_service_ssl_settings_type {
-       MASTER_SERVICE_SSL_SETTINGS_TYPE_SERVER,
-       MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT,
-};
-
 extern const struct setting_parser_info master_service_ssl_setting_parser_info;
 
 const struct master_service_ssl_settings *
 master_service_ssl_settings_get(struct master_service *service);
 
 /* Provides master service ssl settings to iostream settings */
-void master_service_ssl_settings_to_iostream_set(
+void master_service_ssl_client_settings_to_iostream_set(
+       const struct master_service_ssl_settings *ssl_set, pool_t pool,
+       struct ssl_iostream_settings *set_r);
+void master_service_ssl_server_settings_to_iostream_set(
        const struct master_service_ssl_settings *ssl_set, pool_t pool,
-       enum master_service_ssl_settings_type type,
        struct ssl_iostream_settings *set_r);
 
 #endif
index b33d524b09938faeb0896f120e0c27884d717c43..d7d416f9306e3103a461768cc6165f277728f652 100644 (file)
@@ -196,9 +196,8 @@ lmtp_proxy_connection_init_ssl(struct lmtp_proxy_connection *conn,
                return;
 
        master_ssl_set = master_service_ssl_settings_get(master_service);
-       master_service_ssl_settings_to_iostream_set(
-               master_ssl_set, pool_datastack_create(),
-               MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT, ssl_set_r);
+       master_service_ssl_client_settings_to_iostream_set(
+               master_ssl_set, pool_datastack_create(), ssl_set_r);
        if ((conn->set.ssl_flags & PROXY_SSL_FLAG_ANY_CERT) != 0)
                ssl_set_r->allow_invalid_cert = TRUE;
 
index 272de90158c78a44dc262c8904ec1d39bcbf64aa..df11479431d1e5101e472552b5b0039958aeb7b9 100644 (file)
@@ -516,9 +516,8 @@ static int client_sni_callback(const char *name, const char **error_r,
                                          &client->ip, name,
                                          &client->ssl_set, &other_sets);
 
-       master_service_ssl_settings_to_iostream_set(client->ssl_set,
-               pool_datastack_create(),
-               MASTER_SERVICE_SSL_SETTINGS_TYPE_SERVER, &ssl_set);
+       master_service_ssl_server_settings_to_iostream_set(client->ssl_set,
+               pool_datastack_create(), &ssl_set);
        if (ssl_iostream_server_context_cache_get(&ssl_set, &ssl_ctx, &error) < 0) {
                *error_r = t_strdup_printf(
                        "Failed to initialize SSL server context: %s", error);
@@ -542,9 +541,8 @@ int client_init_ssl(struct client *client)
                return -1;
        }
 
-       master_service_ssl_settings_to_iostream_set(client->ssl_set,
-               pool_datastack_create(),
-               MASTER_SERVICE_SSL_SETTINGS_TYPE_SERVER, &ssl_set);
+       master_service_ssl_server_settings_to_iostream_set(client->ssl_set,
+               pool_datastack_create(), &ssl_set);
        /* If the client cert is invalid, we'll reply NO to the login
           command. */
        ssl_set.allow_invalid_cert = TRUE;
index 35d5cb3ace18719d98a22dfa47a25d486153491b..aae38fb9b6b079bd39b3b03686e7a18af8315d35 100644 (file)
@@ -760,10 +760,8 @@ int login_proxy_starttls(struct login_proxy *proxy)
        struct ssl_iostream_settings ssl_set;
        const char *error;
 
-       master_service_ssl_settings_to_iostream_set(proxy->client->ssl_set,
-                                                   pool_datastack_create(),
-                                                   MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT,
-                                                   &ssl_set);
+       master_service_ssl_client_settings_to_iostream_set(
+               proxy->client->ssl_set, pool_datastack_create(), &ssl_set);
        if ((proxy->ssl_flags & PROXY_SSL_FLAG_ANY_CERT) != 0)
                ssl_set.allow_invalid_cert = TRUE;
        /* NOTE: We're explicitly disabling ssl_client_ca_* settings for now
index 728e7b1e5dbef0d15e9af017a81087d79e644c6b..e75f7cd6180353fc41cd7840e447c83a4acc6089 100644 (file)
@@ -380,9 +380,8 @@ static void login_ssl_init(void)
        if (strcmp(global_ssl_settings->ssl, "no") == 0)
                return;
 
-       master_service_ssl_settings_to_iostream_set(global_ssl_settings,
-               pool_datastack_create(),
-               MASTER_SERVICE_SSL_SETTINGS_TYPE_SERVER, &ssl_set);
+       master_service_ssl_server_settings_to_iostream_set(global_ssl_settings,
+               pool_datastack_create(), &ssl_set);
        if (io_stream_ssl_global_init(&ssl_set, &error) < 0)
                i_fatal("Failed to initialize SSL library: %s", error);
        login_ssl_initialized = TRUE;
index 22240fbead47c280dd87018219c6fdb45422f8a4..dd3809a95a56d070245361893f16b601f9082ebc 100644 (file)
@@ -54,9 +54,8 @@ void event_export_transport_http_post(const struct exporter *exporter,
                struct ssl_iostream_settings ssl_set;
                i_zero(&ssl_set);
                if (master_ssl_set != NULL) {
-                       master_service_ssl_settings_to_iostream_set(master_ssl_set,
-                               pool_datastack_create(),
-                               MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT,
+                       master_service_ssl_client_settings_to_iostream_set(
+                               master_ssl_set, pool_datastack_create(),
                                &ssl_set);
                }
                const struct http_client_settings set = {