strv_free(network->ntp);
strv_free(network->dns);
+ strv_free(network->domains);
netdev_unref(network->bridge);
return r;
strv_uniq(*domains);
+ network->wildcard_domain = !!strv_find(*domains, "*");
- if (strv_isempty(*domains))
- network->wildcard_domain = false;
- else if (strv_find(*domains, "*"))
- network->wildcard_domain = true;
+ STRV_FOREACH(domain, *domains) {
+ if (is_localhost(*domain))
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "'localhost' domain names may not be configured, ignoring assignment: %s", *domain);
+ else if (!hostname_is_valid(*domain)) {
+ if (!streq(*domain, "*"))
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "domain name is not valid, ignoring assignment: %s", *domain);
+ } else
+ continue;
- STRV_FOREACH(domain, *domains)
- if (is_localhost(*domain) || !hostname_is_valid(*domain))
- strv_remove(*domains, *domain);
+ strv_remove(*domains, *domain);
+
+ /* We removed one entry, make sure we don't skip the next one */
+ domain--;
+ }
return 0;
}