From: J. Nick Koston Date: Thu, 1 Dec 2016 07:38:02 +0000 (-0600) Subject: config: Match multiple names in local_name X-Git-Tag: 2.2.27~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b998db8adb80da954832a60faa1c3cb3725af3b5;p=thirdparty%2Fdovecot%2Fcore.git config: Match multiple names in local_name This can significantly reduce memory usage when using a UCC certificate with multiple names by only loading the certificate and key once. --- diff --git a/src/config/config-filter.c b/src/config/config-filter.c index 426a32639a..4c2071a2c8 100644 --- a/src/config/config-filter.c +++ b/src/config/config-filter.c @@ -37,7 +37,17 @@ static bool config_filter_match_rest(const struct config_filter *mask, if (mask->local_name != NULL) { if (filter->local_name == NULL) return FALSE; - if (dns_match_wildcard(filter->local_name, mask->local_name) != 0) + /* Handle multiple names seperated by spaces in local_name + * Ex: local_name "mail.domain.tld domain.tld mx.domain.tld" { ... } */ + const char *const *local_name = t_strsplit_spaces(mask->local_name, " "); + bool matched = FALSE; + for (; *local_name != NULL; local_name++) { + if (dns_match_wildcard(filter->local_name, *local_name) == 0) { + matched = TRUE; + break; + } + } + if (!matched) return FALSE; } /* FIXME: it's not comparing full masks */