]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: master_service_ssl_settings_to_iostream_set() - add client/server parameter
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 31 Oct 2017 22:35:33 +0000 (00:35 +0200)
committerTimo Sirainen <tss@dovecot.fi>
Mon, 6 Nov 2017 23:09:00 +0000 (01:09 +0200)
src/lib-master/master-service-ssl-settings.c
src/lib-master/master-service-ssl-settings.h

index 6825c531bdd329914e4967492ff1e8c9c6ed1abd..a377e1a97f5fcbab4c745fd5dd016f8556a3a2a9 100644 (file)
@@ -169,23 +169,33 @@ master_service_ssl_settings_get(struct master_service *service)
        return sets[1];
 }
 
-void
-master_service_ssl_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_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);
        set_r->protocols = p_strdup(pool, ssl_set->ssl_protocols);
        set_r->cipher_list = p_strdup(pool, ssl_set->ssl_cipher_list);
+       /* NOTE: It's a bit questionable whether ssl_ca should be used for
+          clients. But at least for now it's needed for login-proxy. */
        set_r->ca = p_strdup(pool, ssl_set->ssl_ca);
 
-       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);
+       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);
+               }
+               break;
+       case MASTER_SERVICE_SSL_SETTINGS_TYPE_CLIENT:
+               set_r->ca_file = p_strdup(pool, ssl_set->ssl_client_ca_file);
+               set_r->ca_dir = p_strdup(pool, ssl_set->ssl_client_ca_dir);
+               break;
        }
 
        set_r->dh = p_strdup(pool, ssl_set->ssl_dh);
index e4762ee9a0396efff7c799fd95969ef7e155ad3d..eb399b98a251fe32929fd2eab4a50abdc6299a58 100644 (file)
@@ -34,16 +34,20 @@ 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(const struct master_service_ssl_settings *ssl_set,
-                                           pool_t pool,
-                                           struct ssl_iostream_settings *set_r);
-
+void master_service_ssl_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