]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Set application protocol on new context only
authorAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 3 Feb 2025 12:15:58 +0000 (14:15 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:39:01 +0000 (12:39 +0200)
src/lib-http/http-client.c
src/lib-http/http-server-connection.c
src/lib-smtp/smtp-client-connection.c
src/lib-smtp/smtp-server-connection.c
src/lib-ssl-iostream/iostream-ssl.c
src/login-common/client-common.c

index 70df64b098eeb56a2ba393a36de5c39b5903fd6e..b626d50e2d18f44730613b5da84afb8b5bdb2def 100644 (file)
@@ -363,11 +363,13 @@ int http_client_init_ssl_ctx(struct http_client *client, const char **error_r)
                return 0;
 
        if (client->ssl_set != NULL) {
-               if (ssl_iostream_client_context_cache_get(client->ssl_set,
-                                                         &client->ssl_ctx,
-                                                         error_r) < 0)
+               int ret;
+               if ((ret = ssl_iostream_client_context_cache_get(client->ssl_set,
+                                                                &client->ssl_ctx,
+                                                                error_r)) < 0)
                        return -1;
-               ssl_iostream_context_set_application_protocols(client->ssl_ctx, names);
+               else if (ret > 0)
+                       ssl_iostream_context_set_application_protocols(client->ssl_ctx, names);
                return 0;
        }
        /* no ssl settings given via http_client_settings -
@@ -378,14 +380,14 @@ int http_client_init_ssl_ctx(struct http_client *client, const char **error_r)
 
        int ret = ssl_iostream_client_context_cache_get(set, &client->ssl_ctx,
                                                        error_r);
-       if (ret == 0) {
+       if (ret > 0) {
                ssl_iostream_context_set_application_protocols(client->ssl_ctx,
                                                               names);
        }
 
        settings_free(set);
        settings_free(ssl_set);
-       return ret;
+       return ret < 0 ? -1 : 0;
 }
 
 /*
index 2aa19c4300b04641983f105c9843568fa176efbd..d397ea0a41f35c41b08d0bd793fde1d4338356b4 100644 (file)
@@ -383,11 +383,12 @@ http_server_connection_ssl_init(struct http_server_connection *conn)
                                                      &conn->conn.output,
                                                      &conn->ssl_iostream,
                                                      &error);
-       } else if (ssl_iostream_server_context_cache_get(server->ssl_set,
-                                                        &ssl_ctx, &error) < 0)
-               ret = -1;
-       else {
-               ssl_iostream_context_set_application_protocols(ssl_ctx, names);
+       } else if ((ret = ssl_iostream_server_context_cache_get(server->ssl_set,
+                                                               &ssl_ctx, &error)) < 0) {
+               /* pass */
+       } else {
+               if (ret > 0)
+                       ssl_iostream_context_set_application_protocols(ssl_ctx, names);
                ret = io_stream_create_ssl_server(ssl_ctx,
                                                  server->event,
                                                  &conn->conn.input,
index 7685c3107fbf4eb51dc04f9b2237b63558de6f4f..81a945bdd931f758559231346f7a62c51ee48d8e 100644 (file)
@@ -1573,6 +1573,7 @@ smtp_client_connection_init_ssl_ctx(struct smtp_client_connection *conn,
                                    const char **error_r)
 {
        struct smtp_client *client = conn->client;
+       int ret;
 
        if (conn->ssl_ctx != NULL)
                return 0;
@@ -1590,9 +1591,9 @@ smtp_client_connection_init_ssl_ctx(struct smtp_client_connection *conn,
                        "Requested SSL connection, but no SSL settings given";
                return -1;
        }
-       if (ssl_iostream_client_context_cache_get(conn->set.ssl, &conn->ssl_ctx,
-                                                 error_r) < 0)
-               return -1;
+       if ((ret = ssl_iostream_client_context_cache_get(conn->set.ssl, &conn->ssl_ctx,
+                                                        error_r)) <= 0)
+               return ret;
        const char *application_protocol = smtp_protocol_name(conn->protocol);
        const char *const names[] = {
                application_protocol,
index c0d77cca6c60b3de0bc92dd629693f86de4327eb..8b879c92cb73b1d28826ea4d90e96d59341d4fdd 100644 (file)
@@ -375,20 +375,23 @@ smtp_server_connection_sni_callback(const char *name, const char **error_r,
        ssl_server_settings_to_iostream_set(ssl_set, ssl_server_set,
                                            &conn->set.ssl);
 
-       if (ssl_iostream_server_context_cache_get(conn->set.ssl, &ssl_ctx,
-                                                 error_r) < 0) {
+       int ret;
+       if ((ret = ssl_iostream_server_context_cache_get(conn->set.ssl, &ssl_ctx,
+                                                        error_r)) < 0) {
                settings_free(ssl_set);
                settings_free(ssl_server_set);
                return -1;
        }
        settings_free(ssl_set);
        settings_free(ssl_server_set);
-       const char *application_protocol = smtp_protocol_name(conn->set.protocol);
-       const char *const names[] = {
-               application_protocol,
-               NULL
-       };
-       ssl_iostream_context_set_application_protocols(ssl_ctx, names);
+       if (ret == 1) {
+               const char *application_protocol = smtp_protocol_name(conn->set.protocol);
+               const char *const names[] = {
+                       application_protocol,
+                       NULL
+               };
+               ssl_iostream_context_set_application_protocols(ssl_ctx, names);
+       }
        ssl_iostream_change_context(conn->ssl_iostream, ssl_ctx);
        ssl_iostream_context_unref(&ssl_ctx);
        return 0;
index 59acac4f2642085f4d8f4326731dbaa20ff12a88..52e2996558089d2ea951ea151b346ed25c2d8772 100644 (file)
@@ -161,7 +161,7 @@ int io_stream_autocreate_ssl_client(
        settings_free(set);
        if (ret < 0)
                return -1;
-       if (parameters->application_protocols != NULL) {
+       if (ret > 0 && parameters->application_protocols != NULL) {
                ssl_iostream_context_set_application_protocols(ctx,
                                parameters->application_protocols);
        }
@@ -197,7 +197,7 @@ int io_stream_autocreate_ssl_server(
        settings_free(set);
        if (ret < 0)
                return -1;
-       if (parameters->application_protocols != NULL) {
+       if (ret > 0 && parameters->application_protocols != NULL) {
                ssl_iostream_context_set_application_protocols(ctx,
                                parameters->application_protocols);
        }
index 715d1102371ac22688348c9a624f942983757f27..c4265f4d36891e4b61724af96b5d47a811ca7395 100644 (file)
@@ -683,6 +683,7 @@ int client_sni_callback(const char *name, const char **error_r,
        struct client *client = context;
        struct ssl_iostream_context *ssl_ctx;
        const struct ssl_iostream_settings *ssl_set;
+       int ret;
 
        if (client->ssl_servername_settings_read)
                return 0;
@@ -718,12 +719,12 @@ int client_sni_callback(const char *name, const char **error_r,
 
        ssl_server_settings_to_iostream_set(client->ssl_set,
                client->ssl_server_set, &ssl_set);
-       if (ssl_iostream_server_context_cache_get(ssl_set, &ssl_ctx, error_r) < 0) {
+       if ((ret = ssl_iostream_server_context_cache_get(ssl_set, &ssl_ctx, error_r)) < 0) {
                settings_free(ssl_set);
                return -1;
        }
        settings_free(ssl_set);
-       if (login_binary->application_protocols != NULL) {
+       if (ret > 0 && login_binary->application_protocols != NULL) {
                ssl_iostream_context_set_application_protocols(ssl_ctx,
                        login_binary->application_protocols);
        }