}
static int
-load_ca_locations(struct ssl_iostream_context *ctx, const char *ca_file,
+load_ca_locations(struct ssl_iostream_context *ctx,
const char *ca_dir, const char **error_r)
{
- if (SSL_CTX_load_verify_locations(ctx->ssl_ctx, ca_file, ca_dir) != 0)
+ if (SSL_CTX_load_verify_locations(ctx->ssl_ctx, NULL, ca_dir) != 0)
return 0;
- if (ca_dir == NULL) {
- *error_r = t_strdup_printf(
- "Can't load CA certs from %s "
- "(ssl_client_ca_file setting): %s",
- ca_file, openssl_iostream_error());
- } else if (ca_file == NULL) {
- *error_r = t_strdup_printf(
- "Can't load CA certs from directory %s "
- "(ssl_client_ca_dir setting): %s",
- ca_dir, openssl_iostream_error());
- } else {
- *error_r = t_strdup_printf(
- "Can't load CA certs from file %s and directory %s "
- "(ssl_client_ca_* settings): %s",
- ca_file, ca_dir, openssl_iostream_error());
- }
+ *error_r = t_strdup_printf("Can't load CA certs from directory %s "
+ "(ssl_client_ca_dir setting): %s",
+ ca_dir, openssl_iostream_error());
return -1;
}
{
X509_STORE *store;
STACK_OF(X509_NAME) *xnames = NULL;
- const char *ca_file, *ca_dir;
bool have_ca = FALSE;
if (set->ca.content != NULL && set->ca.content[0] != '\0') {
ssl_iostream_ctx_verify_remote_cert(ctx, set, xnames);
have_ca = TRUE;
}
- ca_file = set->ca_file == NULL || *set->ca_file == '\0' ?
- NULL : set->ca_file;
- ca_dir = set->ca_dir == NULL || *set->ca_dir == '\0' ?
- NULL : set->ca_dir;
- if (ca_file != NULL || ca_dir != NULL) {
- if (load_ca_locations(ctx, ca_file, ca_dir, error_r) < 0)
+ if (set->ca_dir != NULL && *set->ca_dir != '\0') {
+ if (load_ca_locations(ctx, set->ca_dir, error_r) < 0)
return -1;
have_ca = TRUE;
}
p_memdup(pool, set, sizeof(*set));
set_copy->pool = pool;
pool_add_external_ref(pool, set->pool);
- set_copy->ca_file = NULL;
set_copy->ca_dir = NULL;
settings_free(set);
set = set_copy;
return FALSE;
if (!quick_strcmp(set1->ca.content, set2->ca.content) ||
- !quick_strcmp(set1->ca_file, set2->ca_file) ||
!quick_strcmp(set1->ca_dir, set2->ca_dir))
return FALSE;