Skip to content

Commit ec4e85f

Browse files
committed
global: Set application protocol on new context only
1 parent 65bc1c9 commit ec4e85f

File tree

6 files changed

+34
-26
lines changed

6 files changed

+34
-26
lines changed

src/lib-http/http-client.c

+8-6
Original file line numberDiff line numberDiff line change
@@ -363,11 +363,13 @@ int http_client_init_ssl_ctx(struct http_client *client, const char **error_r)
363363
return 0;
364364

365365
if (client->ssl_set != NULL) {
366-
if (ssl_iostream_client_context_cache_get(client->ssl_set,
367-
&client->ssl_ctx,
368-
error_r) < 0)
366+
int ret;
367+
if ((ret = ssl_iostream_client_context_cache_get(client->ssl_set,
368+
&client->ssl_ctx,
369+
error_r)) < 0)
369370
return -1;
370-
ssl_iostream_context_set_application_protocols(client->ssl_ctx, names);
371+
else if (ret > 0)
372+
ssl_iostream_context_set_application_protocols(client->ssl_ctx, names);
371373
return 0;
372374
}
373375
/* 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)
378380

379381
int ret = ssl_iostream_client_context_cache_get(set, &client->ssl_ctx,
380382
error_r);
381-
if (ret == 0) {
383+
if (ret > 0) {
382384
ssl_iostream_context_set_application_protocols(client->ssl_ctx,
383385
names);
384386
}
385387

386388
settings_free(set);
387389
settings_free(ssl_set);
388-
return ret;
390+
return ret < 0 ? -1 : 0;
389391
}
390392

391393
/*

src/lib-http/http-server-connection.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -383,11 +383,12 @@ http_server_connection_ssl_init(struct http_server_connection *conn)
383383
&conn->conn.output,
384384
&conn->ssl_iostream,
385385
&error);
386-
} else if (ssl_iostream_server_context_cache_get(server->ssl_set,
387-
&ssl_ctx, &error) < 0)
388-
ret = -1;
389-
else {
390-
ssl_iostream_context_set_application_protocols(ssl_ctx, names);
386+
} else if ((ret = ssl_iostream_server_context_cache_get(server->ssl_set,
387+
&ssl_ctx, &error)) < 0) {
388+
/* pass */
389+
} else {
390+
if (ret > 0)
391+
ssl_iostream_context_set_application_protocols(ssl_ctx, names);
391392
ret = io_stream_create_ssl_server(ssl_ctx,
392393
server->event,
393394
&conn->conn.input,

src/lib-smtp/smtp-client-connection.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -1573,6 +1573,7 @@ smtp_client_connection_init_ssl_ctx(struct smtp_client_connection *conn,
15731573
const char **error_r)
15741574
{
15751575
struct smtp_client *client = conn->client;
1576+
int ret;
15761577

15771578
if (conn->ssl_ctx != NULL)
15781579
return 0;
@@ -1590,9 +1591,9 @@ smtp_client_connection_init_ssl_ctx(struct smtp_client_connection *conn,
15901591
"Requested SSL connection, but no SSL settings given";
15911592
return -1;
15921593
}
1593-
if (ssl_iostream_client_context_cache_get(conn->set.ssl, &conn->ssl_ctx,
1594-
error_r) < 0)
1595-
return -1;
1594+
if ((ret = ssl_iostream_client_context_cache_get(conn->set.ssl, &conn->ssl_ctx,
1595+
error_r)) <= 0)
1596+
return ret;
15961597
const char *application_protocol = smtp_protocol_name(conn->protocol);
15971598
const char *const names[] = {
15981599
application_protocol,

src/lib-smtp/smtp-server-connection.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -375,20 +375,23 @@ smtp_server_connection_sni_callback(const char *name, const char **error_r,
375375
ssl_server_settings_to_iostream_set(ssl_set, ssl_server_set,
376376
&conn->set.ssl);
377377

378-
if (ssl_iostream_server_context_cache_get(conn->set.ssl, &ssl_ctx,
379-
error_r) < 0) {
378+
int ret;
379+
if ((ret = ssl_iostream_server_context_cache_get(conn->set.ssl, &ssl_ctx,
380+
error_r)) < 0) {
380381
settings_free(ssl_set);
381382
settings_free(ssl_server_set);
382383
return -1;
383384
}
384385
settings_free(ssl_set);
385386
settings_free(ssl_server_set);
386-
const char *application_protocol = smtp_protocol_name(conn->set.protocol);
387-
const char *const names[] = {
388-
application_protocol,
389-
NULL
390-
};
391-
ssl_iostream_context_set_application_protocols(ssl_ctx, names);
387+
if (ret == 1) {
388+
const char *application_protocol = smtp_protocol_name(conn->set.protocol);
389+
const char *const names[] = {
390+
application_protocol,
391+
NULL
392+
};
393+
ssl_iostream_context_set_application_protocols(ssl_ctx, names);
394+
}
392395
ssl_iostream_change_context(conn->ssl_iostream, ssl_ctx);
393396
ssl_iostream_context_unref(&ssl_ctx);
394397
return 0;

src/lib-ssl-iostream/iostream-ssl.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ int io_stream_autocreate_ssl_client(
161161
settings_free(set);
162162
if (ret < 0)
163163
return -1;
164-
if (parameters->application_protocols != NULL) {
164+
if (ret > 0 && parameters->application_protocols != NULL) {
165165
ssl_iostream_context_set_application_protocols(ctx,
166166
parameters->application_protocols);
167167
}
@@ -197,7 +197,7 @@ int io_stream_autocreate_ssl_server(
197197
settings_free(set);
198198
if (ret < 0)
199199
return -1;
200-
if (parameters->application_protocols != NULL) {
200+
if (ret > 0 && parameters->application_protocols != NULL) {
201201
ssl_iostream_context_set_application_protocols(ctx,
202202
parameters->application_protocols);
203203
}

src/login-common/client-common.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ int client_sni_callback(const char *name, const char **error_r,
683683
struct client *client = context;
684684
struct ssl_iostream_context *ssl_ctx;
685685
const struct ssl_iostream_settings *ssl_set;
686+
int ret;
686687

687688
if (client->ssl_servername_settings_read)
688689
return 0;
@@ -718,12 +719,12 @@ int client_sni_callback(const char *name, const char **error_r,
718719

719720
ssl_server_settings_to_iostream_set(client->ssl_set,
720721
client->ssl_server_set, &ssl_set);
721-
if (ssl_iostream_server_context_cache_get(ssl_set, &ssl_ctx, error_r) < 0) {
722+
if ((ret = ssl_iostream_server_context_cache_get(ssl_set, &ssl_ctx, error_r)) < 0) {
722723
settings_free(ssl_set);
723724
return -1;
724725
}
725726
settings_free(ssl_set);
726-
if (login_binary->application_protocols != NULL) {
727+
if (ret > 0 && login_binary->application_protocols != NULL) {
727728
ssl_iostream_context_set_application_protocols(ssl_ctx,
728729
login_binary->application_protocols);
729730
}

0 commit comments

Comments
 (0)