X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fresolve%2Fresolved-dns-scope.c;h=1fa8401ed50f738388c4d9bc89fc2374a0135163;hb=a2ba62c719224a4b47751623ca5e8b0333f49721;hp=0a70cb1f0f6486ff9e79fcc91069d305b09cb0e0;hpb=ad867662936a4c7ab2c7116d804c272338801231;p=elogind.git diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index 0a70cb1f0..1fa8401ed 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -102,8 +102,19 @@ int dns_scope_send(DnsScope *s, DnsPacket *p) { return -EMSGSIZE; ifindex = s->link->ifindex; + } else { + uint32_t mtu; + + mtu = manager_find_mtu(s->manager); + if (mtu > 0) { + if (p->size > mtu) + return -EMSGSIZE; + } } + if (p->size > DNS_PACKET_UNICAST_SIZE_MAX) + return -EMSGSIZE; + if (srv->family == AF_INET) r = manager_dns_ipv4_send(s->manager, srv, ifindex, p); else if (srv->family == AF_INET6) @@ -176,11 +187,14 @@ DnsScopeMatch dns_scope_test(DnsScope *s, const char *domain) { if (dns_name_root(domain)) return DNS_SCOPE_NO; + if (is_localhost(domain)) + return DNS_SCOPE_NO; + if (s->type == DNS_SCOPE_MDNS) { if (dns_name_endswith(domain, "254.169.in-addr.arpa") || dns_name_endswith(domain, "0.8.e.f.ip6.arpa")) return DNS_SCOPE_YES; - else if (dns_name_endswith(domain, "local") || + else if (dns_name_endswith(domain, "local") && !dns_name_single_label(domain)) return DNS_SCOPE_MAYBE;