X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=blobdiff_plain;f=src%2Fresolve%2Fresolved-manager.c;h=02153b929fb9e19fa78d1dbb47616d74a1333ebc;hp=cbdeebb211a1ecc24de45bbb8312464aaffd8671;hb=71a681ae50175a569bf832d2615fd11994c41d73;hpb=03b35f8775c3a20ad05ff1cbac74e15cc24d8990 diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index cbdeebb211a..02153b929fb 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -1,9 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ +#include #include #include -#include #include +#include +#include +#include #if HAVE_LIBIDN2 #include @@ -14,9 +17,10 @@ #include "dirent-util.h" #include "dns-domain.h" #include "fd-util.h" -#include "fileio-label.h" +#include "fileio.h" #include "hostname-util.h" #include "io-util.h" +#include "missing_network.h" #include "netlink-util.h" #include "network-internal.h" #include "ordered-set.h" @@ -24,8 +28,8 @@ #include "random-util.h" #include "resolved-bus.h" #include "resolved-conf.h" -#include "resolved-dnssd.h" #include "resolved-dns-stub.h" +#include "resolved-dnssd.h" #include "resolved-etc-hosts.h" #include "resolved-llmnr.h" #include "resolved-manager.h" @@ -78,14 +82,14 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void * goto fail; if (is_new) - log_debug("Found new link %i/%s", ifindex, l->name); + log_debug("Found new link %i/%s", ifindex, l->ifname); break; } case RTM_DELLINK: if (l) { - log_debug("Removing link %i/%s", l->ifindex, l->name); + log_debug("Removing link %i/%s", l->ifindex, l->ifname); link_remove_user(l); link_free(l); } @@ -333,7 +337,7 @@ static int determine_hostname(char **full_hostname, char **llmnr_hostname, char return log_debug_errno(r, "Can't determine system hostname: %m"); p = h; - r = dns_label_unescape(&p, label, sizeof label); + r = dns_label_unescape(&p, label, sizeof label, 0); if (r < 0) return log_error_errno(r, "Failed to unescape host name: %m"); if (r == 0) @@ -371,7 +375,7 @@ static int determine_hostname(char **full_hostname, char **llmnr_hostname, char return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "System hostname is 'localhost', ignoring."); - r = dns_name_concat(n, "local", mdns_hostname); + r = dns_name_concat(n, "local", 0, mdns_hostname); if (r < 0) return log_error_errno(r, "Failed to determine mDNS hostname: %m"); @@ -403,7 +407,7 @@ static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname, assert(mdns_hostname); p = fallback_hostname(); - r = dns_label_unescape(&p, label, sizeof(label)); + r = dns_label_unescape(&p, label, sizeof label, 0); if (r < 0) return log_error_errno(r, "Failed to unescape fallback host name: %m"); @@ -413,7 +417,7 @@ static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname, if (r < 0) return log_error_errno(r, "Failed to escape fallback hostname: %m"); - r = dns_name_concat(n, "local", &m); + r = dns_name_concat(n, "local", 0, &m); if (r < 0) return log_error_errno(r, "Failed to concatenate mDNS hostname: %m"); @@ -506,12 +510,10 @@ static int manager_sigusr1(sd_event_source *s, const struct signalfd_siginfo *si assert(si); assert(m); - f = open_memstream(&buffer, &size); + f = open_memstream_unlocked(&buffer, &size); if (!f) return log_oom(); - (void) __fsetlocking(f, FSETLOCKING_BYCALLER); - LIST_FOREACH(scopes, scope, m->dns_scopes) dns_scope_dump(scope, f); @@ -579,7 +581,7 @@ int manager_new(Manager **ret) { .dnssec_mode = DEFAULT_DNSSEC_MODE, .dns_over_tls_mode = DEFAULT_DNS_OVER_TLS_MODE, .enable_cache = true, - .dns_stub_listener_mode = DNS_STUB_LISTENER_UDP, + .dns_stub_listener_mode = DNS_STUB_LISTENER_YES, .read_resolv_conf = true, .need_builtin_fallbacks = true, .etc_hosts_last = USEC_INFINITY, @@ -595,6 +597,12 @@ int manager_new(Manager **ret) { if (r < 0) log_warning_errno(r, "Failed to parse configuration file: %m"); +#if ENABLE_DNS_OVER_TLS + r = dnstls_manager_init(m); + if (r < 0) + return r; +#endif + r = sd_event_default(&m->event); if (r < 0) return r; @@ -675,6 +683,10 @@ Manager *manager_free(Manager *m) { while (m->dns_streams) dns_stream_unref(m->dns_streams); +#if ENABLE_DNS_OVER_TLS + dnstls_manager_free(m); +#endif + hashmap_free(m->links); hashmap_free(m->dns_transactions); @@ -688,7 +700,7 @@ Manager *manager_free(Manager *m) { manager_mdns_stop(m); manager_dns_stub_stop(m); - sd_bus_unref(m->bus); + sd_bus_flush_close_unref(m->bus); sd_event_source_unref(m->sigusr1_event_source); sd_event_source_unref(m->sigusr2_event_source); @@ -752,20 +764,17 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) { if (r < 0) return r; - iov = (struct iovec) { - .iov_base = DNS_PACKET_DATA(p), - iov.iov_len = p->allocated, - }; + iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->allocated); l = recvmsg(fd, &mh, 0); - if (l == 0) - return 0; if (l < 0) { if (IN_SET(errno, EAGAIN, EINTR)) return 0; return -errno; } + if (l == 0) + return 0; assert(!(mh.msg_flags & MSG_CTRUNC)); assert(!(mh.msg_flags & MSG_TRUNC)); @@ -934,10 +943,7 @@ static int manager_ipv4_send( assert(port > 0); assert(p); - iov = (struct iovec) { - .iov_base = DNS_PACKET_DATA(p), - .iov_len = p->size, - }; + iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->size); sa = (union sockaddr_union) { .in.sin_family = AF_INET, @@ -995,10 +1001,7 @@ static int manager_ipv6_send( assert(port > 0); assert(p); - iov = (struct iovec) { - .iov_base = DNS_PACKET_DATA(p), - .iov_len = p->size, - }; + iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->size); sa = (union sockaddr_union) { .in6.sin6_family = AF_INET6, @@ -1156,7 +1159,7 @@ int manager_next_hostname(Manager *m) { if (r < 0) return r; - r = dns_name_concat(h, "local", &k); + r = dns_name_concat(h, "local", 0, &k); if (r < 0) return r;