if (value == NULL || **value == '\0') {
const char *newval;
if (old_settings_ssl_dh_load(&newval, &error)) {
- settings_parse_line(parser->parser, t_strdup_printf("%s=%s", "ssl_dh", newval));
+ if (newval != NULL)
+ settings_parse_line(parser->parser, t_strdup_printf("%s=%s", "ssl_dh", newval));
} else {
i_error("%s", error);
ret = -1;
/* try read it */
struct istream *is = i_stream_create_file(fn, IO_BLOCK_SIZE);
+
if (is->stream_errno == ENOENT) {
/* this is given because the ssl-parameters.dat file is no more there
and we don't want to to make go searching for the file
this code is only ever reached if ssl_dh_parameters is empty anyways
*/
- *error_r = "ssl enabled, but ssl_dh not set";
- return FALSE;
+ /* check moved to correct place from here */
+ *value = NULL;
+ return TRUE;
} else if (is->stream_errno != 0) {
*error_r = t_strdup(i_stream_get_error(is));
return FALSE;
i_warning("You can generate it with: dd if=%s bs=1 skip=%u | openssl dh -inform der > %s", fn, off, SYSCONFDIR"/dh.pem");
seen_ssl_parameters_dat = TRUE;
}
+ } else if (is->stream_errno == ENOENT) {
+ /* check for empty ssl_dh elsewhere */
+ *value = NULL;
+ return TRUE;
} else {
*error_r = "ssl enabled, but ssl_dh not set";
return FALSE;
*error_r = "ssl enabled, but ssl_key not set";
return FALSE;
}
+ if (*set->ssl_dh == '\0') {
+ *error_r = "ssl enabled, but ssl_dh not set";
+ return FALSE;
+ }
#endif
if (set->ssl_verify_client_cert && *set->ssl_ca == '\0') {
*error_r = "ssl_verify_client_cert set, but ssl_ca not";