ssl_set.allow_invalid_cert = TRUE;
if (stat("/etc/ssl/certs", &st) == 0 && S_ISDIR(st.st_mode))
ssl_set.ca_dir = "/etc/ssl/certs"; /* debian */
- if (stat("/etc/ssl/certs", &st) == 0 && S_ISREG(st.st_mode))
- ssl_set.ca_file = "/etc/pki/tls/cert.pem"; /* redhat */
+ if (stat("/etc/ssl/certs", &st) == 0 && S_ISREG(st.st_mode)) {
+ /* redhat */
+ const char *ca_value;
+ if (settings_parse_read_file("/etc/pki/tls/cert.pem",
+ "/etc/pki/tls/cert.pem",
+ unsafe_data_stack_pool,
+ &ca_value, &error) < 0)
+ i_fatal("%s", error);
+ settings_file_get(ca_value, unsafe_data_stack_pool,
+ &ssl_set.ca);
+ }
http_client_settings_init(null_pool, &http_set);
http_set.max_idle_time_msecs = 5*1000;
/* timelimit */
ldap_set_option(conn->conn, LDAP_OPT_TIMELIMIT, &opt);
- if (conn->ssl_set.ca_file != NULL)
- ldap_set_option(conn->conn, LDAP_OPT_X_TLS_CACERTFILE, conn->ssl_set.ca_file);
+ if (conn->ssl_set.ca.content != NULL &&
+ conn->ssl_set.ca.content[0] != '\0') {
+ if (conn->ssl_set.ca.path[0] == '\0') {
+ *error_r = "LDAP doesn't support inline ssl_client_ca_file - use a path";
+ return -1;
+ }
+ ldap_set_option(conn->conn, LDAP_OPT_X_TLS_CACERTFILE,
+ conn->ssl_set.ca.path);
+ }
if (conn->ssl_set.ca_dir != NULL)
ldap_set_option(conn->conn, LDAP_OPT_X_TLS_CACERTDIR, conn->ssl_set.ca_dir);
return FALSE;
if (null_strcmp(conn->ssl_set.curve_list, set->ssl_set->curve_list) != 0)
return FALSE;
- if (null_strcmp(conn->ssl_set.ca_file, set->ssl_set->ca_file) != 0)
+ if (null_strcmp(conn->ssl_set.ca.path, set->ssl_set->ca.path) != 0)
return FALSE;
if (null_strcmp(conn->ssl_set.cert.cert.content,
set->ssl_set->cert.cert.content) != 0)
conn->set.ssl_set = &conn->ssl_set;
conn->ssl_set.min_protocol = p_strdup(pool, set->ssl_set->min_protocol);
conn->ssl_set.cipher_list = p_strdup(pool, set->ssl_set->cipher_list);
- conn->ssl_set.ca_file = p_strdup(pool, set->ssl_set->ca_file);
+ conn->ssl_set.ca.path = p_strdup(pool, set->ssl_set->ca.path);
+ conn->ssl_set.ca.content =
+ p_strdup(pool, set->ssl_set->ca.content);
conn->ssl_set.cert.cert.path =
p_strdup(pool, set->ssl_set->cert.cert.path);
conn->ssl_set.cert.cert.content =