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 -
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;
}
/*
&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,
const char **error_r)
{
struct smtp_client *client = conn->client;
+ int ret;
if (conn->ssl_ctx != NULL)
return 0;
"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,
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;
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);
}
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);
}
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;
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);
}