diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c index 9978d35727..48e5321d79 100644 --- a/src/resolve/resolved-bus.c +++ b/src/resolve/resolved-bus.c @@ -433,9 +433,6 @@ static int bus_method_resolve_hostname(sd_bus_message *message, void *userdata, if (r != 0) return r; - if (dns_name_is_empty(hostname)) - return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Empty hostname"); - r = dns_name_is_valid(hostname); if (r < 0) return r; @@ -743,9 +740,6 @@ static int bus_method_resolve_record(sd_bus_message *message, void *userdata, sd if (ifindex < 0) return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid interface index"); - if (dns_name_is_empty(name)) - return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Empty name"); - r = dns_name_is_valid(name); if (r < 0) return r; diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index c0f6df6447..f0d0ca4bba 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -613,6 +613,10 @@ DnsScopeMatch dns_scope_good_domain( if ((SD_RESOLVED_FLAGS_MAKE(s->protocol, s->family, false, false) & flags) == 0) return DNS_SCOPE_NO; + /* Never resolve empty name. */ + if (dns_name_is_empty(domain)) + return DNS_SCOPE_NO; + /* Never resolve any loopback hostname or IP address via DNS, LLMNR or mDNS. Instead, always rely on * synthesized RRs for these. */ if (is_localhost(domain) || diff --git a/src/resolve/resolved-dns-synthesize.c b/src/resolve/resolved-dns-synthesize.c index ef1423f441..0914515fdf 100644 --- a/src/resolve/resolved-dns-synthesize.c +++ b/src/resolve/resolved-dns-synthesize.c @@ -394,7 +394,18 @@ int dns_synthesize_answer( name = dns_resource_key_name(key); - if (is_localhost(name)) { + if (dns_name_is_empty(name)) { + /* Do nothing. */ + + } else if (dns_name_endswith(name, "0.in-addr.arpa") > 0 || + dns_name_equal(name, "255.255.255.255.in-addr.arpa") > 0 || + dns_name_equal(name, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0 || + dns_name_endswith(name, "invalid") > 0) { + + nxdomain = true; + continue; + + } else if (is_localhost(name)) { r = synthesize_localhost_rr(m, key, ifindex, &answer); if (r < 0) diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c index feca5f74f1..cc684608a6 100644 --- a/src/resolve/resolved-varlink.c +++ b/src/resolve/resolved-varlink.c @@ -303,9 +303,6 @@ static int vl_method_resolve_hostname(Varlink *link, JsonVariant *parameters, Va if (p.ifindex < 0) return varlink_error_invalid_parameter(link, JSON_VARIANT_STRING_CONST("ifindex")); - if (dns_name_is_empty(p.name)) - return varlink_error_invalid_parameter(link, JSON_VARIANT_STRING_CONST("name")); - r = dns_name_is_valid(p.name); if (r < 0) return r;